我有这四个陈述
$ 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
$
Run Code Online (Sandbox Code Playgroud)
第二种情况是怎么回事?为什么不修改$ _?
因为“更多本地化” $_是循环之一。观察如何
perl -E "\$_ = 'abc'; print(\$_) for 1 .. 2; print(\$_);"
Run Code Online (Sandbox Code Playgroud)
打印12abc而不是abcabcabc。
$_...这是
$_即使您不使用Perl也会假设的地方:...
foreach如果没有其他变量,则循环中的默认迭代器变量。
该
foreach关键字实际上是对一个同义词for的关键字,这样你就可以使用。如果省略VAR,$_则将其设置为每个值。
在for循环中,循环变量是作用域的。因此,命令
$x=17; for $x (1..2) { say $x } say $x;
Run Code Online (Sandbox Code Playgroud)
导致在$x退出循环后恢复为原始值:
1
2
17
Run Code Online (Sandbox Code Playgroud)
隐式变量$_也不例外:您从命令中获得相同的结果
$_=17; say for (1..2); say;
Run Code Online (Sandbox Code Playgroud)