5

Perl に C コードを埋め込みたい。この C コードでは、巨大なファイルをメモリに読み込み、変更を加えてハッシュ (カスタム ハッシュ) を作成します。このハッシュを Perl コードからアクセスできるようにしたいと考えています。出来ますか?どうすれば目標に到達できますか?

4

3 に答える 3

11

c を perl に埋め込むには、XS を探しています。これに関する詳細なドキュメントは、 および にperlxsありperlxstutます。

C から perl データ構造を構築する場合、perlapiハッシュを扱う の部分を使用する必要があります。XS に関する多くのドキュメントで、そのさまざまな部分がすでに説明されています。あなたが探している重要な部分はnewHVhv_storeです。

これは、あなたがやりたいと思うかもしれないことに似た小さな(そして完全にテストされていない)例です:

SV *
some_func ()
    PREINIT:
        HV *hash;
    CODE:
        hash = newHV();
        hv_stores(hash, "foo", 3, newSViv(42));
        hv_stores(hash, "bar", 3, newSViv(23));
        RETVAL = newRV_noinc((SV *)hash);
    OUTPUT:
        RETVAL

これは と呼ばれる XS サブルーチンsome_funcで、ハッシュを作成し、それへの参照を perl 空間に返します。

my $href = some_func();
# $href = { foo => 42, bar => 23 };
于 2010-10-05T08:53:53.660 に答える
3
  • 内部と C 言語インターフェースを参照してください
  • Perl に C コードを埋め込むためのInline-Cも参照してください。Inline モジュールを使用すると、他のプログラミング言語のソース コードを Perl スクリプトまたはモジュールに直接「インライン」で配置できます。コードは必要に応じて自動的にコンパイルされ、Perl からすぐにアクセスできるようにロードされます。

また、インラインを使用する必要があるのはなぜですか?もお読みください。

于 2010-10-05T08:49:38.633 に答える
1

SWIGを使用して、C、Perl、およびその他のいくつかの言語間のインターフェースを作成できます。

于 2010-10-05T08:51:11.637 に答える