導入
見つけたパターンを別の文字列に置き換えるのが置換です。s/探す/置き換える/ と書きます。テキスト整形の主役です。
説明
$文字列 =~ s/パターン/置換文字列/; で、最初に見つかった1か所を置き換えます。すべて置き換えるには /g フラグを付けます。置換した回数が返ります。
use strict;
use warnings;
my $s = "I like cats. Cats are cute.";
$s =~ s/cats/dogs/; # 最初の1か所だけ
print "$s\n"; # I like dogs. Cats are cute.
my $t = "a-b-c-d";
my $n = ($t =~ s/-/_/g); # すべて置換
print "$t\n"; # a_b_c_d
print "置換した数: $n\n"; # 3
置換文字列の中では $1 などのキャプチャも使えます。日付の区切りを変える例です。
use strict;
use warnings;
my $date = "2024/08/15";
$date =~ s{(\d+)/(\d+)/(\d+)}{$1-$2-$3}; # 区切りを {} にしてもよい
print "$date\n"; # 2024-08-15
やってみよう
s/// のパターンや置換文字列を書き換えて結果を確かめましょう。/g の有無で置換される数がどう変わるかも見てください。
演習
my $s = "hello world"; について、s/o/0/g ですべての o を 0 に置き換えて表示してください(結果は hell0 w0rld)。
ヒント1を見る
$s =~ s/o/0/g; のあと print "$s\n";。