受到另一个问题答案的启发:Slicing a nested hash in Perl,使用另一个哈希中的键列表来切割哈希的语法是什么?
我认为以下会这样做,但事实并非如此:
@slice_result = @{$hash1{@($hash_2{$bin})}};
我收到"scalar found where operator expected"
的错误消息。 ?
答案 0 :(得分:1)
这是基于另一个哈希的键的哈希切片的正确语法:
my %hash1 = ( 'this' => 2,
'that' => 1,
);
my %hash2 = ( 'this' => 'two',
'that' => 'one',
);
my @slice = @hash1{keys %hash2};
print @slice # prints 12;
答案 1 :(得分:1)
您对数据的模糊描述让我觉得您甚至不确定您的数据。您应该花一些时间来吸收数据结构,直到您能够清楚地描述它为止。
我想你说你有
my %hash1 = (
apple => 2,
banana => 3,
orange => 4,
);
my %hash2 = (
red => [qw( apple )],
yellow => [qw( apple banana )],
orange => [qw( orange )],
);
您希望将%hash2上的某个元素引用的数组用作%hash1切片的键。如果你理解这一点,那只是一步一步做的问题。
$hash2{yellow}
将为我们提供所需数组的引用,
@{ $hash2{yellow} }
将为我们提供数组本身。我们希望将其用作哈希切片的索引表达式
@hash1{EXPR}
所以我们得到:
@hash1{ @{ $hash2{yellow} } } # 2,3