my %hash = ( key1 => 1, key2 => 2, key3 => 3, ); # 普通に key2 と key3 の値を取る。 my @values1 = ($hash{key2}, $hash{key3}); print join(', ', @values1); # 2, 3 # スライスで key2 と key3 の値を取る。 my @values2 = @hash{qw/key2 key3/}; print join(', ', @values2); # 2, 3
$hash を都度タイプしなくていいので楽ですね。
続いて、ハッシュリファレンスだった場合の書き方。
my $hash_ref = { key1 => 1, key2 => 2, key3 => 3, }; # 普通に key2 と key3 の値を取る。 my @values1 = ($hash_ref->{key2}, $hash_ref->{key3}); print join(', ', @values1); # 2, 3 # スライスで key2 と key3 の値を取る。 my @values2 = @{$hash_ref}{qw/key2 key3/}; print join(', ', @values2); # 2, 3
$hash_ref をデリファレンスしつつスライスした配列を返すため、
@{$hash_ref}{qw/key2 key3/}
という書き方になります。
続いてちょっと発展。
my @saiyans = ( {name => 'ラディッツ', power => 1500, is_prince => 0}, {name => 'ナッパ', power => 4000, is_prince => 0}, {name => 'ベジータ', power => 18000, is_prince => 1}, ); # @saiyans から name をキーにした power のハッシュがほしい。 my %power = map {@{$_}{qw/name power/}} @saiyans; # %power = ( # 'ラディッツ' => 1500, # 'ナッパ' => 4000, # 'ベジータ' => 18000, # );
参考: perldata - Perl のデータ型(Slices)
0 件のコメント:
コメントを投稿