
164
9 章 正規表現によるテキスト処理
(my $copy = $original) =~ s/\d+ ribs?/10 ribs/;
これは少しわかりにくいかもしれません。なぜなら、置換演算子の対象は代入先の変数
$copy
で
あり、実際には
$copy
の値が変更されるということを、多くの人が忘れているからです。
Perl 5.14
では、この仕組みを変える
/r
修飾子が導入されました。通常は、
s///
の値は置換が行われた回数
ですが、
/r
修飾子を指定すると、元の文字列は変更せずに、置換の結果を値として返すようにな
ります。
use v5.14;
my $copy = $original =~ s/\d+ ribs?/10 ribs/r;
これは
1
つ前の例とほとんど同じに見えますが、カッコがありません。しかし、このケースで
は、逆順に処理が行われるのです。まず最初に置換が行われ、その次に代入が行われるのです。
2
章(と
perlop
ドキュメント)には、優先順位表があるので確かめてみましょう。
=~
のほうが
=
よ
り優先度が高くなっています。
9.1.6
大文字と小文字の変換
置換を行う際に、置き換える単語の先頭を大文字にしたい(あるいは、したくない)ことがあり
ます。
Perl
では、バックスラッシュエスケープを使えば、このような仕事は朝飯前です。
\U
エス
ケープは、その後ろに続くものをすべて強制的に大文字に変換します。
$_ = "I saw Barney with Fred.";
s/(fred|barney)/\U$1/gi; ...