小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

tr変換演算子のテストメモ

置換はイメージしやすいのですが、変換は思わぬ結果になる場合が多いですね。
以下にtr変換演算子のテストメモをしときます。

#1文字ずつ対応して変換(ケース1)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/abc/xyz/;
print $string, "\n"; # xxxx,yyyy,zzzz が表示される
#
#1文字ずつ対応して変換(ケース2)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/ac/xz/;
print $string, "\n"; # xxxx,bbbb,zzzz が表示される
#
#検索文字リストが多い場合(検索文字リストのcはyと対応する)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/abc/xy/;
print $string, "\n"; # xxxx,yyyy,yyyy が表示される
#
#変換文字リストが多い場合(変換文字リストのzは無視)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/ab/xyz/;
print $string, "\n"; # xxxx,yyyy,cccc が表示される
#
#s修飾子使用の場合(連続文字が一つにまとめられて変換)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/abc/xyz/s;
print $string, "\n"; # x,y,y が表示される
#
#c修飾子使用の場合(検索文字リストに含まれない『,』が変換対象になる)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/abc/:/c;
print $string, "\n"; # aaaa:bbbb:cccc が表示される
#
#c修飾子とd修飾子使用の場合(検索文字リストに含まれない『,』を削除)
$string = 'aaaa,bbbb,cccc';
$string =~ tr/abc/:/cd;
print $string, "\n"; # aaaabbbbcccc が表示される