Perl でハッシュのキーに使える値を疑問に思ったので簡単に実験。undef や空文字列もキーに使えるんですね。
use Data::Dumper;
my %hash;
$hash{ 0 } = 'numeric zero';
$hash{ '0' } = 'sigle quoted zero'; # over write above
$hash{ '0'} = 'escaped zero in sigle quotes';
$hash{ "0"} = 'escaped zero in double quotes';
$hash{ 0 } = 'escaped zero in non quotes';
$hash{ A } = 'Uppercase character A';
$hash{ a } = 'lowercase character A';
$hash{ '' } = 'empty string';
$hash{undef} = 'undefined value';
print Dumper(%hash);
$VAR1 = {
'' => 'empty string',
'A' => 'Uppercase character A',
' ' => 'escaped zero in double quotes',
'a' => 'lowercase character A',
'undef' => 'undefined value',
'SCALAR(0x182fae4)' => 'escaped zero in non quotes',
'0' => 'sigle quoted zero',
'0' => 'escaped zero in sigle quotes'
};
寄せられたコメント (全 1 件中、最新 5 件まで表示しています)
単なる文字列の 'undef' になっちゃうみたいです。
括弧内で @{[undef]} するか或は変数に入れた undef値 をキーにすると、
警告は出ますが、代入されました。
ただし今度は空文字列 "" に変換されちゃいます。
[結果]
undefと書く: 文字列 'undef' と見なされる。
undef値: 空文字列に変換される。警告付き。
空文字列: キーに使える。