perlで変数の型を調べる
変数がリファレンスである場合に参照先が配列かハッシュか調べる。
blessが絡むとrefだけでもscalarだけでもダメらしい。
sub getDataType($){ return if not ref $_[0]; # return null if not reference type. $_[0]=~/(\w+)\(/; # use scalar to void effect of bless. return $1; } sub test{ my($v)=@_; my $g = getDataType($v); my $r = ref($v); my $s = scalar($v); defined($g) or $g ="(null)"; defined($r) or $r ="(null)"; defined($s) or $s ="(null)"; print "gdt=$g\tref=$r\tscalar=$s\n"; } my $a; sub b{} my $glob; test( undef ); test( '' ); test( 0 ); test( 1 ); test( [] ); test( {} ); test( \$a ); test( \&b ); test( \*glob ); test( (bless[],"HOGE") ); test( (bless{},"HOGE") ); test( (bless\$a,"HOGE") ); test( (bless\&b,"HOGE") ); test( (bless\*glob,"HOGE") );