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 件のコメント:
コメントを投稿