2012-02-26 63 views
0

這可能是一件很基本的,但我無法找到一個答案,這在其他地方:如何從默認的變量中。減去perl的

過來的數組似乎在互爲作用,我可以添加到默認變量針對陣列中的其他項目,但我不能從它。減去,像這樣:

foreach (0..$#array) { 
    if ($array[$_] =~ m/PATTERN/) { 
     $array[$_] = $TRING1; 
     $array[$_+1] = $TRING2; 
     $array[$_-1] = $TRING3; 
    }; 
}; 

它只是不分配任何以前的項目,但離開它,因爲它是(我從來沒有得到< 0)。

我可能在這裏錯過了一些微不足道的東西?

+1

無法重現您的問題。你能發佈一個可運行的小腳本並重現你的問題嗎? – Mat 2012-02-26 21:30:57

+0

'STRING1','STRING2'和'STRING3'是裸詞。確保始終「嚴格使用」和「使用警告」。每一個。單。時間。 – 2012-02-26 21:33:36

+0

@JackManey我確實使用嚴格和警告。裸語只是在這裏說「一些字符串」。對不起,我會編輯它。 – jcm 2012-02-26 21:39:34

回答

0

在迭代它們並檢查模式的同時,您似乎正在更改數組中的元素。如果你把打印語句中,您將看到:

my @array = qw/PATTERN PATTERN PATTERN/; 
my ($str1,$str2,$str3) = qw/A B C/; 
foreach (0..$#array) { 
    print qq|Index is $_, pattern is $array[$_]\n|; 
    if ($array[$_] =~ m/PATTERN/) { 
     $array[$_]  = $str1; 
     $array[$_+1] = $str2; 
     $array[$_-1] = $str3; 
    }; 
}; 

Prints: 
Index is 0, pattern is PATTERN 
Index is 1, pattern is B 
Index is 2, pattern is C 

創建一個新的陣列將幫助,但據我所看到的仍然是一個不可預知的結構。