Perl5 C Functions You Don't Know About

| コメント(0) | トラックバック(0)
Perl5は実にさまざまな環境で動く。すると当然だが、C/XSでコードを書くときはその辺りも考慮にいれつつコードを書くのが良い。

File::MMagic::XSはApacheもmod_mime_magicをXSから直接使えるようにポートした物だ。これをPerl用にポートするとなると当然APRが使えないので環境の差を吸収してくれるレイヤーがなくなってしまう。んじゃあそのままCの関数使えばいいのかというと・・・Perl5がすでに吸収してくれるところが結構おおいのだな。

perldoc perlclibとすると、その辺りのC関数→Perlの内部関数の対応表を出してくれる。

が。書いてないものもある。そういうのはperlのソースコードを展開したところで.hファイルを色々grepしてるとでてくるので積極的に使っていくといいと思う。ちなみに今回そもそもこのエントリを書こうと思ったのはstat()に対応する関数はないのかと思って探してみたからだ。そしたらStat()というものを発見。S_ISDIR()とか、そのまわりの処理も結構マクロがかかれていて便利

あと、Perl API自体もバージョンによってちょっぴり違う事があるので、そういう時はDevel::PPPortを使ってppport.hを作成するといい。このppport.hはマクロでバージョン毎の違いを吸収してくれるとともに、その差異に該当する構文がディストリビューション内に存在するのかどうかをチェックしてくれるPerl スクリプトでもある:
perl -MDevel::PPPort -e 'Devel::PPPort::WriteFile()' # ppport.h作成 perl ppport.h # 実行!

あとは表示される診断結果に従って、#defineをファイルに入れていくだけ。便利よ!

Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ