Inline::C に値を渡す
前回の Text::CSV::Simple を使ったときに困ったこと。
Perlは変数の型とか気にしないからいいんだけど
C言語は(Perlの内部的にも)そうはいかないから
こーゆー厄介なシーンが発生するんだろうなぁ。
っと言うワケでメモ。
Perlで渡した整数の配列を
SvPV(Inline_Stack_Item(i), PL_na);
を使って抜き出すと、char型のポインタらしく
printf("%s\n", SvPV(Inline_Stack_Item(i), PL_na));
で出力すれば、正しく整数として表示されるようですが
printf("%d\n", SvPV(Inline_Stack_Item(i), PL_na));
で出力すると、謎の文字列が出てきた。(当然といえば当然ですが)
で、悩みに悩んでらくだ本をみたら、どうやら
期待する型 | かきかた |
---|---|
int | IV |
double | NV |
string | PV |
とすれば、いいとゆーことが分かりました。
つまり、上の printf は
printf("%d\n", SvIV(Inline_Stack_Item(i)));
と書けばよろしいようで。
PL_na を入れるとエラーだったので
きっとPL_naは抜き出すバイト数かなんかが入ってるのかな。
IV、NV、PVの他にもビット数に応じた型等もあるようで。
その辺はらくだ本を見るしかないみたい。