我认为这里可能有些混乱(无论是你还是我,我都说不清是哪一个)。
这完全取决于您希望最终数据结构是什么样子。我相信您正在寻找的是将与 %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 debugger(如果您熟悉如何使用它) ))。
希望对你有帮助。