Perl 为什么$不';t单个替换和全局替换之间的更改
我有这4条陈述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
$ 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
发件人:
以下是Perl将假定的位置,即使您不使用它:$\uu
- 如果未提供其他变量,则
循环中的默认迭代器变量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下的评论)(删除了该评论——其要点是有)