2014-03-04 17 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更有可能是有用的。