我先设置了一个环境变量 X。
> setenv X "abc 12_3 abc"
然后我在 perl 中编写了一个正则表达式,试图在 $2 中匹配第一列以及一个空格和剩余的字符串。在这里我打印第一场比赛 $1
> echo $X|perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $1'
abc
在这里,我打印第二场比赛 $2。
> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $2'
12_3 abc
到目前为止,看起来一切都很好。现在我想将第二场比赛中的所有下划线替换为空格
> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$2=~s/_/ /g;'
Modification of a read-only value attempted at -e line 1, <> line 1.
好吧,错误消息说 $2 是只读的。那很好。所以我将 $2 复制到一些临时变量 $temp。因此,在复制其罚款时,$1 和 $2 仍然存在,如下所示:
> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$temp=$2;print $1.$2'
abc 12_3 abc
现在我尝试用临时字符串 $temp 中的空格替换下划线。
> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;$temp=$2;$temp=~s/_/ /g;print $1.$2'
>
我的问题是 1 美元和 2 美元去哪儿了?即使我对 $temp 进行了更改,如果它更改了 2 美元,至少 1 美元发生了什么?