arg 1到键的类型必须是“@array”附近的哈希(非私有数组)

时间:2014-03-04 20:04:21

标签: arrays perl

尝试在代码下运行时出现以下错误。

arg 1到键的类型必须是“@array”附近的哈希(非私有数组)

代码的想法是比较两个数组数据。此方法适用于我的主服务器,但不能在需要实现的服务器上运行。

不知道该去哪儿。

 foreach (sort keys @array){
        unless (exists $group_list[$_]){
            print "$_: not found\n";
            next;
        }
        if (equivalent($array[$_],$group_list[$_])){
            print "$_: values are equal\n"
        }else{
            print "$_: values are not equal\n";
        }
    }

如果需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:3)

keys @array仅适用于较新的perls,因此通常应避免使用。我们可以直接写下索引的范围,而无需额外的语法:除非设置了$[,索引以0开头,并且是最后一个索引的$#array的连续范围。然后:

for (sort 0 .. $#array)

请注意,此范围已按数字排序,sort将按字母顺序对其进行排序。如果不需要该行为,请删除sort

for (0 .. $#array)

这是迭代所有索引的正常习惯用法。

另请注意(除非你做了非常不寻常的事情),exists $array[$_]可能是真的,所以这个测试不太可能有用(例如,如果你预先将数组扩展到特定大小,它可能是错误的: $#array = $size - 1)。测试条目是否defined更有可能是有用的。