最初に環境変数 X を設定します。
> setenv X "abc 12_3 abc"
次に、最初の列とスペースを一致させ、残りの文字列も $2 に一致させようとする正規表現を perl で作成しました。ここでは、最初の一致 $1 を出力します
> echo $X|perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $1'
abc
ここでは、2 番目の一致 $2 を出力します。
> echo $X | perl -lne '$_=~m/([^\s]*[\s])(.*)/;print $2'
12_3 abc
今のところ、見た目はすべて問題ありません。今、2番目の一致のすべてのアンダースコアをスペースに置き換えることを考えました
> 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 はどこに行ったのですか? $2 を変更した場合に $temp に変更を加えたにもかかわらず、少なくとも $1 に何が起こったのでしょうか?