読者です 読者をやめる 読者になる 読者になる

Perl 5.10以前では, リファレンス型はSVt_IVでなく SVt_RV

perl xs

https://github.com/tokuhirom/Linux-Socket-Accept4/pull/6


ハマったのでメモ.


Perl 5.11以降では, SVt_RV(リファレンス型)は SVt_IV(整数型)のエイリアス(同値)
なのですが, それより前では異なる値です. リファレンス型の判定に SVt_IVしか
使っていなかったので, Perl 5.10.1ではその条件にマッチせず, 予期せぬ挙動と
なっていました. if文だと SvROKを使えばこんなことを気にせずいけるのですが,
今回は switch文だったので, ハマりました.


switch文の場合は同値の caseは書けないので, ifdefによる分岐も必要になります.

参考

http://perldoc.perl.org/perlapi.html#SV-Flags

新しい perldoc perlapiには下記の通り同値であることが示されています.

SVt_RV is an alias for SVt_IV, which exists for backward compatibility