perl で XS モジュールを作成する (C ライブラリの関数を呼び出す)
perl から C 言語ライブラリの関数を呼び出したかったので、XS 言語を使ってみた。
今回は、引数で渡したアルファベットの文字を小文字から大文字に変えるというもの。
1. テンプレートを作成する
h2xs コマンドで各ファイルを生成する。
$ h2xs -A -n Foo Writing Foo/Foo.pm Writing Foo/Foo.xs Writing Foo/Makefile.PL Writing Foo/README Writing Foo/test.pl Writing Foo/Changes Writing Foo/MANIFEST
2. C のソースコードを書く
Foo.xs に C で行う処理を記述する。
$ cat Foo.xs #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include <ctype.h> MODULE = Foo PACKAGE = Foo int foo_upcase(s) char *s CODE: for (; *s; s++) { if (isalpha(*s)) *s = toupper(*s); } RETVAL = 0; OUTPUT: RETVAL
3. コンパイルする & テストを実行する
$ perl Makefile.PL $ make $ make test
4. サンプルプログラムを書く
$ cat foo.pl #!/usr/bin/perl -w use strict; use warnings; use ExtUtils::testlib; use Foo; my $s = "abcd" . "\0"; Foo::foo_upcase($s); print "result: $s\n";
5. サンプルプログラムを実行してみる
$ ./foo.pl result: ABCD