如何从perl中的默认变量中减去

如何从perl中的默认变量中减去,perl,Perl,这可能是一个非常基本的问题,但我在其他地方找不到答案: 在数组的交互中,我可以添加到默认变量中,以指向数组中的其他项,但不能从中减去,如下所示: foreach (0..$#array) { if ( $array[$_] =~ m/PATTERN/ ) { $array[$_] = $TRING1; $array[$_+1] = $TRING2; $array[$_-1] = $TRING3; }; }; 它只是没有将任何内容分

这可能是一个非常基本的问题,但我在其他地方找不到答案:

在数组的交互中,我可以添加到默认变量中,以指向数组中的其他项,但不能从中减去,如下所示:

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

它只是没有将任何内容分配给前一项,而是保持原样(我从来没有得到您似乎在迭代数组中的元素并检查其模式的同时更改了数组中的元素。如果在其中放入print语句,您将看到:

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

创建一个新数组会有所帮助,但据我所知,它仍然是一个不可预测的构造。

无法重现您的问题。您可以发布一个可运行的小脚本并重现您的问题吗?
STRING1
STRING2
STRING3
都是空话。请确保始终
使用strict;
使用warnings;
.Every.Single.Time.@JackManey我确实使用了strict和warnings。这些单词在这里只是为了说“一些字符串”。很抱歉,我会编辑它。@jcm-很公平。感谢您的澄清。您的代码可能会产生一些意想不到的后果:1.在第一步(
$\u==0
),您可能正在更改
@array
.2的最后一个元素。数组中的某个特定元素可能会被更改多次,具体取决于您的模式。正如上面和tanget的答案所示,您的代码不可靠。您可能在问。如果您描述您正在尝试的内容,您会得到更好的答案g来完成这个循环。