-1

受到另一个问题的答案的启发:在 Perl 中切片嵌套哈希,使用保存在另一个哈希中的键列表对哈希进行切片的语法是什么?

我认为以下会做到这一点,但事实并非如此:

@slice_result = @{$hash1{@($hash_2{$bin})}};

我收到一条错误消息"scalar found where operator expected"。?

4

2 回答 2

1

这是基于另一个哈希键的哈希切片的正确语法:

my %hash1 = ( 'this' => 2,
              'that' => 1,
            );
my %hash2 = ( 'this' => 'two',
              'that' => 'one',
            );


my @slice = @hash1{keys %hash2};


print @slice # prints 12;
于 2012-09-17T20:29:53.950 回答
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
于 2012-09-17T20:46:37.857 回答