2012-02-26 23 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 

创建一个新的阵列将帮助,但据我所看到的仍然是一个不可预知的结构。