2014-03-04 21 views
0

尝试在代码下运行时获取以下错误。在密钥“@array”附近,密钥1的类型必须是散列(非专用阵列)“

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"; 
     } 
    } 

如果需要更多信息,请让我知道。

+0

'keys'仅在Perl中使用散列时定义。你想在这里完成什么?只需按值排序数组? –

+0

'@ array'是一个数组,'sort keys'是通过一个哈希键。 'group_list'也是一个数组吗?你可以使用'for $ i(0.. $#Array){}'来存储索引到'$ i'中。 – chilemagic

+0

我想比较两个数组的数据彼此。该方法适用于我的家庭服务器,但不是它需要实现的服务器。 – user3049982

回答

3

keys @array只适用于较新的perls,因此一般应避免。我们可以直接写下指数范围,没有太多额外的语法:除非设置了$[,否则指数从0开始,并且是最后一个指数$#array的连续范围。然后:

for (sort 0 .. $#array) 

注意,这个范围已经是数字顺序排序,并sort会按字母顺序排序。取出sort如果该行为是不希望的:

for (0 .. $#array) 

这是遍历所有指标正常的成语。

还要注意的是(除非你做极不寻常的东西),exists $array[$_]将可能是真实的,所以这个测试是不太可能是有用的(也可以是假的,例如,如果你preextended阵列为特定的大小:$#array = $size - 1)。测试一个条目是否是defined更有可能是有用的。