Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么$不';t单个替换和全局替换之间的更改_Perl - Fatal编程技术网

Perl 为什么$不';t单个替换和全局替换之间的更改

Perl 为什么$不';t单个替换和全局替换之间的更改,perl,Perl,我有这4条陈述 $ perl -e ' $in="axaxaxhhhh"; $in=~s/a/p/ for 1..2 ; print $in ' # 1. Ok pxpxaxhhhh $ perl -e ' $_="axaxaxhhhh"; $_=~s/a/p/ for 1..2 ; print $_ ' # 2. Why not working? axaxaxhhhh $ perl -e ' $_="axaxaxhhhh"; $_=~s/a/p/g; print $_ ' # 3.goo

我有这4条陈述

$ perl -e ' $in="axaxaxhhhh"; $in=~s/a/p/ for 1..2 ; print $in '  # 1. Ok
pxpxaxhhhh

$ perl -e ' $_="axaxaxhhhh"; $_=~s/a/p/ for 1..2 ; print $_ ' # 2. Why not working?
axaxaxhhhh

$ perl -e ' $_="axaxaxhhhh"; $_=~s/a/p/g; print $_ ' # 3.good
pxpxpxhhhh

$ perl -e ' $_="axaxaxhhhh"; $_=~s/a/p/; print $_ ' # 4.good 
pxaxaxhhhh

$
我的第二个案子发生了什么?。为什么它不修改$\u?

,因为“更本地的”
$\u
是循环中的一个。观察如何

perl -E "\$_ = 'abc'; print(\$_) for 1 .. 2; print(\$_);"
打印
12abc
而不是
abcabc

发件人:

  • $\uu

    以下是Perl将假定的位置,即使您不使用它:

    • 如果未提供其他变量,则
      foreach
      循环中的默认迭代器变量
和来自:

foreach
关键字实际上是
for
关键字的同义词,因此您可以使用其中一个。如果省略了VAR,则将为每个值设置
$\u


在for循环中,循环变量的作用域是有限的。因此,命令

$x=17; for $x (1..2) { say $x } say $x;
$_=17; say for (1..2); say;
退出循环后,
$x
将恢复为其原始值:

1
2
17
隐式变量
$\uuz
也不例外:您可以从命令中获得相同的结果

$x=17; for $x (1..2) { say $x } say $x;
$_=17; say for (1..2); say;

@zdim。。非常感谢。刚刚更新。。顺便说一句,foreach循环将
$\ucode>别名转换为
1..2
返回的标量。您正在对这些临时标量执行替换。@stack0114106“忙于工作”--忙于工作很好。我的意思是,我希望这是一个好工作:)我建议将
-E
更改为
-E
,因为这里没有使用任何功能。(我想这只是简单地使用了OP,但也发生了变化。请参见我在OP下的评论)(删除了该评论——其要点是有)