404 Blog Not Found:perl - 万能なnewの書き方
しかし、デフォルト値を持たせたければどうすればよいか、こうすればよい。
bless { %default, @_ }, $class;
これでなんでうまくいくのかよくわからなかったのでperlshでいろいろ動かしてみた。
main[61]$ %a = (name => 'anon', pet => 'none')
name
anon
pet
none
main[62]$ %b = (name => 'kzfm', pet => 'hana')
name
kzfm
pet
hana
main[63]$ %c = (name => 'yuki')
name
yuki
main[64]$ $d = bless {%a,%b}
main=HASH(0xa123ce8)
main[65]$ print Dumper($d)
$VAR1 = bless( {
'pet' => 'hana',
'name' => 'kzfm'
}, 'main' );
1
main[66]$ $g = bless {%a,%c}
main=HASH(0xa123e94)
main[67]$ print Dumper($g)
$VAR1 = bless( {
'pet' => 'none',
'name' => 'yuki'
}, 'main' );
1
別にblessせんでも
main[77]$ $d = {%a,%b}
HASH(0xa123ce8)
main[78]$ print Dumper($d)
$VAR1 = {
'pet' => 'hana',
'name' => 'kzfm'
};
1
main[79]$ $g = {%a,%c}
HASH(0xa123d24)
main[80]$ print Dumper($g)
$VAR1 = {
'pet' => 'none',
'name' => 'yuki'
};
1
うーん、思った通りに動いている。というわけで、一度アレイにしてみる。
main[88]$ $d = [%a,%b]
ARRAY(0xa123fd8)
main[89]$ print Dumper($d)
$VAR1 = [
'pet',
'none',
'name',
'anon',
'pet',
'hana',
'name',
'kzfm'
];
1
ちゃんとアレイができているので、これをハッシュのリファレンスにしてみる。
main[90]$ $x = {@{$d}}
HASH(0xa124080)
main[91]$ print Dumper($x)
$VAR1 = {
'pet' => 'hana',
'name' => 'kzfm'
};
1
おー、思ったとおり。
アレイからハッシュにするときにインデックス値の小さい順に評価されていって、同じキー値を持つものは上書きされていくのか。