はちゅにっき

こっちのブログはまったり更新

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の他にもビット数に応じた型等もあるようで。
その辺はらくだ本を見るしかないみたい。