Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. モジュール
  3. here

FFI::Raw - C言語の関数をPerlから直接呼び出す

PerlにはC言語を呼び出すための方法として基本的なものでかつ、汎用的に利用できるものとしてXS言語というものが用意されています。

でもXS言語を書くのは一苦労です。C言語で書かれたライブラリをPerlから簡単に呼び出すことができると便利ですね。

libffiというC言語のライブラリを他の言語から呼び出す仕組みがあるのですが、これのPerl実装のひとつがFFI::Rawです。CPANから簡単にインストールできます。

以下のサンプルは、サイトに書かれていたものそのままですが、mというライブラリのcosという関数を呼び出しているサンプルです。

use FFI::Raw;

my $cos = FFI::Raw->new(
  'libm.so', 'cos',
  FFI::Raw::double, # 戻り値
  FFI::Raw::double  # 引数1
);

print $cos->call(2.0);

第一引数はダイナミックライブラリ名です。C言語ではmというダイナミックライブラリに対応するファイル名はlibm.soになります。

ドキュメントにライブラリの検索パスの記述はないですが、/lib/usr/libにおかれているものが検索対象だと思われます。

ライブラリの検索パスを追加するには、「環境変数 LD_LIBRARY_PATHを設定する方法」と「/etc/ld.so.confに追加する方法」があるようです。(参考:/usr/local/libの共有ライブラリ(.so)を参照しないとき)

第二引数は関数名です。第三引数は戻り値の型、第四引数以降は、引数の型になります。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。