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



  1. Perl




  2. モジュール



  3. here

 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)を参照しないとき)

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