この他の質問への答えに触発されました:Perlでネストされたハッシュをスライスします。別のハッシュに保持されているキーのリストを使用してハッシュをスライスするための構文は何ですか?
私は次のことがそれをするだろうと思ったが、そうではない:
@slice_result = @{$hash1{@($hash_2{$bin})}};
というエラーが表示されます"scalar found where operator expected"
。?
この他の質問への答えに触発されました:Perlでネストされたハッシュをスライスします。別のハッシュに保持されているキーのリストを使用してハッシュをスライスするための構文は何ですか?
私は次のことがそれをするだろうと思ったが、そうではない:
@slice_result = @{$hash1{@($hash_2{$bin})}};
というエラーが表示されます"scalar found where operator expected"
。?
これは、別のハッシュのキーに基づくハッシュスライスの正しい構文です。
my %hash1 = ( 'this' => 2,
'that' => 1,
);
my %hash2 = ( 'this' => 'two',
'that' => 'one',
);
my @slice = @hash1{keys %hash2};
print @slice # prints 12;
あなたのデータのあいまいな説明は、あなたが何を持っているのかさえわからないと私に思わせます。データを明確に説明できるようになるまで、データの構造を吸収するために時間を費やす必要があります。
私はあなたが持っていると言っていると思います
my %hash1 = (
apple => 2,
banana => 3,
orange => 4,
);
my %hash2 = (
red => [qw( apple )],
yellow => [qw( apple banana )],
orange => [qw( orange )],
);
%hash2の要素の1つによって参照される配列を、%hash1のスライスのキーとして使用するとします。あなたがそれを理解しているなら、それはそれを段階的に行うことの問題です。
$hash2{yellow}
目的の配列への参照を取得し、
@{ $hash2{yellow} }
配列自体を取得します。これをハッシュスライスのインデックス式として使用したい
@hash1{EXPR}
したがって、次のようになります。
@hash1{ @{ $hash2{yellow} } } # 2,3