2013-04-05 66 views
2
use strict; 
my @array =(); 
my @nums = [3, 4]; 
foreach my $i (0 .. 10) { 
    foreach my $j (0 .. 10) { 
     $nums[0] = 4+1; 
     push @{ $array[$i] }, @nums; 
    } 
} 
print $array[6][2][0]. "\n"; 

正如人們可以看到他們是否運行代碼,這不能正常運行。但是,如果您註釋掉「$ nums [0] = 4 + 1;」這行,它運行良好。到底是怎麼回事?只能將不可變數組推到別人身上?無法解析的perl錯誤?

+0

'我@array =();更好寫入''作爲我的@array;',因爲它們是功能上相同。 – 2013-04-05 12:58:54

回答

5

@nums是一個數組,並且您分配給數組引用(括號爲[])。因此,它改變到適當的數組聲明:my @nums = (3, 4);

use strict; 
use Data::Dump; 

my @array =(); 
my @nums = (3, 4); 
foreach my $i (0 .. 10) { 
    foreach my $j (0 .. 10) { 
     $nums[0] = 4+1; 
     push @{ $array[$i] }, @nums; 
    } 
} 

dd @array; 

#-- output: 
(
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
    [5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4], 
) 
+0

新問題:當我在外部數組的一個數組上調用一個子函數時,我該怎麼做?它一直告訴我我正在使用「未初始化的值」。 (這不是我在我的項目中使用的實際數組陣列,但是我做了所述的更改。) – user1126849 2013-04-05 08:01:25

+3

應該提出一個新問題作爲新問題。沒有加入評論中的現有問題。 – 2013-04-05 09:57:45

+0

我這樣做了,但我想我會把它放在這裏,因爲它們有些相關。 – user1126849 2013-04-07 07:37:42