5部 関数リファレンス

tr

tr/SEARCH/REPLACE/



tr///演算子は検索文字列SEARCHに含まれる各文字を、置換文字列REPLACEにマッチする文字に1文字ずつ変換します。REPLACEを省略すると、マッチした文字は削除されます。この関数は変換、もしくは削除した文字数を返します。置換文字列が検索文字列より短い場合、対応する文字がない時は置換文字列中の最後の文字に置き換えられます。

tr///演算子の変わりにy///演算子を使うこともできます。

オプション
オプション 意味
c 検索リストに指定された文字以外を検索
d 置換されなかった文字を削除
s 置換後の文字が重複している場合は削除して1つにつめる

tr///演算子の使い方

# 小文字に統一
$str =~ tr/A-Z/a-z/;

trは変数を展開しません。変数を使いたい場合には、evalを使います。

eval "tr/$search/$replace/, 1" or die $@;

c オプション(Complement)

cオプションは、検索文字列以外の文字を検索します。つまり、最初に指定する文字列に含まれていない文字を置換文字列の文字に変換します。

# 0から9以外の文字列を*に変換
tr/[0-9]/*/c

s オプション(Squeeze)

sオプションは、検索文字列の文字が連続して複数個見つかった場合、それらを1文字に置き換えます。

# 複数の「A」を1つの「A」に変換
tr/A/A/s

d オプション(Delete)

dオプションは、検索文字列の文字のうち置換文字列には含まれない文字をすべて削除します。

tr///演算子の様々な使い方

$w = 'BOOK@RFS.JP';
$w =~ tr/A-Z/a-z/; # 小文字に正規化
print $w,"\n";
> book@rfs.jp 

# $w に含まれる . の数を数える
$cnt = $w =~ tr/././;
print $cnt,"\n";
> 1

# 英字以外をスペースに変換
$w =~ tr/a-zA-Z/ /cs;
print $w,"\n";
> book rfs jp

# 連続した単語をひとつにまとめる
$w =~ tr/a-zA-Z//s;
print $w,"\n";
> bok rfs jp

関連記事