Perl に C コードを埋め込みたい。この C コードでは、巨大なファイルをメモリに読み込み、変更を加えてハッシュ (カスタム ハッシュ) を作成します。このハッシュを Perl コードからアクセスできるようにしたいと考えています。出来ますか?どうすれば目標に到達できますか?
1560 次
3 に答える
11
c を perl に埋め込むには、XS を探しています。これに関する詳細なドキュメントは、 および にperlxs
ありperlxstut
ます。
C から perl データ構造を構築する場合、perlapi
ハッシュを扱う の部分を使用する必要があります。XS に関する多くのドキュメントで、そのさまざまな部分がすでに説明されています。あなたが探している重要な部分はnewHV
とhv_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 に答える