循环遍历Perl中的数组哈希

coo*_*490 3 arrays perl hash reference dereference

我有一个数组哈希,如下所示:

my %hash = (
234 => ["Larry", "Curly", "Moe"],
235 => ["bb", "ab", "aa", "ab", "bb"],
236 => ["aa", "ab", "bb", "aa", "bb"],
)
Run Code Online (Sandbox Code Playgroud)

对于我的哈希中的每个键,我想循环遍历数组的每个元素,将其分配给标量变量,以便我可以处理它,然后移动到数组的下一个元素.一旦我为一个键处理了数组的所有元素,我想进入下一个键并单独处理其数组的所有元素,依此类推.

我找到并修改了一段代码片段,它迭代哈希值(在这种情况下是每个键的数组).然后我有一个嵌套的for循环,迭代该数组的每个元素.但是,它并没有达到我的预期.

for my $value (values %hash) {
    for (@$value) {
        my $index = shift($_);
       #process index
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息 不是[行号]处的ARRAY参考

例如,对于第一次迭代,我想要$index相等,Larry以便我可以处理它.下一次迭代,我想要$index相等,Curly以便我可以处理它.下一次迭代,$index应该相等Moe,处理它.下一次迭代,$index应该相等bb,依此类推.

可能有更好的功能shift.该shift函数从数组中取出第一个元素.我希望数组的哈希值保留它的值,这样我就不必重新填充数组的哈希值.

谢谢

TLP*_*TLP 9

问题是你的列表@$value已经是数组元素的列表,而不是数组.这就是为什么你不能使用shift它.所有你需要的是:

for my $value (values %hash) {
    for my $index (@$value) {  # "Larry", "Curly", "Moe" etc
       ....
       #process index
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能不想shift在阵列上使用,因为这将删除原始结构中的条目.