5部 関数リファレンス

s

s/PATTERN/REPLACE/egimosx



検索文字PATTERNを使ってパターンを検索し、もし見つかれば、置換文字REPLACEで置き換え、置換した数を返します。見つからなければ、"偽"を返します。
=~演算子などによって文字列が指定されていなければ、$_が使われます。

スラッシュ( / )の区切り文字以外にも、英数字、空白ではない任意の文字が使えます。シングルクォート( ` )を使うと置換文字列での展開はされません。バッククォートを使うと、置換文字列をコマンドとして実行して、その出力が実際の置換文字列に使われます。PATTERNをカッコ類で括った場合には、REPLACE用にもう一組の区切り文字を用意します。

sの使い方

# スラッシュ( / )以外の区切り文字を使う
$path =~ s|/usr/bin|/usr/local/bin|;

# カッコ類も可
$path =~ s(/usr/bin)(/usr/local/bin);

PATTERNREPLACEの文字列に変数を含めると、文字列として展開されます。

$num = '[0-9]+';
$str = "test 1 2 3";
$str =~ s/$num//gxo;
print $str, "\n";
> test

s/// 演算子の応用

gオプションを使って繰り返し置換

s/<[^>]+>/ /g;

置換した値を他の変数に代入

$str = "if you aint runnin game.\n";
($str2 = $str) =~ s/aint/are not/;
print $str, $str2;
> if you aint runnin game.
> if you are not runnin game.

マッチしたパターンの順番を入れ替える

$str = "back Looking";
$str =~ s/([^ ]*) *([^ ]*)/$2 $1/; # 最初の 2 語の入れ替え
print $str, "\n";s
> Looking back

s/// 演算子用のオプション

オプション 意味
e 式の右側の評価を行なう
ee 式の右側の評価を行い、実行後の返却値を再度評価する
g 繰り返し置換
i 大文字、小文字を区別しないで検索
m 文字列を複数行として扱う
o パターンのコンパイルを 1 度だけにする
s ワイルドカードのドット( . )が改行にもマッチするようにする
x 拡張正規表現を使用する

e オプション-REPLACE を式として評価

e オプションは置換文字列を式として解釈し、evalします。

s/\d+/sprintf("%02d",$&)/e; # マッチした文字列を sprintf で整形

s/^=(\w+)/&func($1)/e; # サブルーチン呼び出しを使う

その他のオプションについては m// 演算子を参照してください。

関連記事