受到另一个问题的答案的启发:在 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 上的一个元素引用的数组作为 %hash1 切片的键。如果您理解这一点,那只是一步一步做的问题。
$hash2{yellow}
将为我们提供对所需数组的引用,并且
@{ $hash2{yellow} }
将为我们提供数组本身。我们想用它作为哈希切片的索引表达式
@hash1{EXPR}
所以我们得到:
@hash1{ @{ $hash2{yellow} } } # 2,3