これがバグなのか、何なのかわかりません。
次のコードは動作しますが、動作しInline::C
ませんInline::CPP
#!/usr/bin/perl
use warnings;
use Inline C;
my @array = (1..10);
print findAvLen(\@array), "\n";
__END__
__C__
int findAvLen(AV* arrayIn) {
return av_len(arrayIn);
}
上記は正常に実行されますが、に置き換えるC
とCPP
、エラーが発生しますCan't locate auto/main/findAvLen.al in @INC...
他のインラインC++コードを動作させることができます。たとえば、この例のように、変数のリストを省略記号を使用してインラインコードに渡すことは可能ですが、なぜAV*が機能しないのでしょうか。たとえば、サブルーチンを使用して、C ++に渡されたperl配列をベクトルに変換したいと思います。たとえばvoid perl2vector(AV* ar, std::vector<T> &v) {...}
、配列引数を取るすべてのC ++関数にそのような変換を実行するコードを挿入するのではなく、その例の構文を使用して、perl配列をそのようなコンバーターに渡すにはどうすればよいですか?
これはバグのようですが、それまでの間、uespは回避策を見つけました。
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
arr
arrayIn
これで、上記のサンプルコードで必要なものと同等になります。