我认为这里可能有些混乱(无论是你还是我,我都说不清是哪一个)。
这完全取决于您希望最终数据结构是什么样子。我相信您正在寻找的是将与 %hash 的键“一个”关联的值作为具有两个元素的数组引用,每个元素本身都是数组引用,如下所示:
# We'll call this "STRUCT-ONE"
%hash = (
'one' => [
['apple', 'banana', 'orange'],
['banana', 'orange','papaya','cherry'],
],
);
...或者,也许您打算只使用一个数组引用作为值,如下所示:
# Let's call this "STRUCT=TWO"
%hash = (
'one' => [
['apple', 'banana', 'orange', 'banana', 'orange','papaya','cherry'],
],
);
填充这些结构中的每一个的语法会有所不同,具体取决于您要查找的上述内容。
对于每个结果,您将以相同的方式初始化您的值:
my %hash = ();
my @array1= ('apple', 'banana', 'orange');
my @array2 =('banana', 'orange','papaya','cherry');
...并且,对于“STRUCT-ONE”,您可以编写如下内容:
$hash{'one'} = [];
push(@{$hash{'one'}}, [@array1]);
push(@{$hash{'one'}}, [@array2]);
...或者,最后两行可以像这样组合:
push(@{$hash{'one'}}, [@array1], [@array2]);
或者,对于上面的“STRUCT-TWO”,您可以将其更改为:
push(@{$hash{'one'}}, @array1, @array2);
(请注意,我只是删除了 '[]' 的匿名数组引用语法)。
最后一条评论...您会注意到我使用 '[@array1]' 创建了一个新的匿名数组引用(并使用现有数组的内容填充它(本质上执行数组内容的副本))而不是使用反斜杠“\@array1”引用现有数组。您选择哪个选项取决于您的真正意图。我选择了前者,以便您拥有一个独立的数据结构(因此进一步修改 @array1 或 @array2 不会影响您的 %hash 内容。但是,如果您有一个非常大的数组并且不希望将其复制到内存(并且您知道内容确实是不可变的),那么引用现有数组可能是更好的选择。
最后,我建议使用Data::Dumper作为诊断工具来检查您的数据结构的实际外观(或者明智地使用Perl 调试器(如果您熟悉如何使用它的话))。
我希望这会有所帮助。