置換の連鎖

「置換の連鎖」って、なんかグッとくるものがあるじゃないですか?
って思ったけど、そうでもないですね。

でも、使ってみると便利だったのでメモっておきます。

ここで知りました。
Perl の正規表現のチュートリアル(perldoc.jp)

use v5.14;
use strict;
use warnings;

my $foo = 'abc';
say '$foo = ', $foo;
say $foo =~ s/a/x/;
say '$foo = ', $foo;

say '-' x 10;

my $bar = 'abc';
say '$bar = ', $bar;
say $bar =~ s/a/x/r;
say '$bar = ', $bar;

これを実行すると、こんな感じ。
$ perl aaa.pl
$foo = abc
1
$foo = xbc
----------
$bar = abc
xbc
$bar = abc

v5.14から使える非破壊置換修飾子こと、/rオプションを付けると、
置換後の文字列が取得できます。

なので、こんなこともできます。

use v5.14;
use strict;
use warnings;

my $foo = 'abc';
say '$foo = ', $foo;
say 'result = ', $foo =~ s/a/x/r =~ s/b/x/r =~ s/c/x/r;

$ perl bbb.pl
$foo = abc
result = xxx

気になる実行順序はこんな感じ?

use v5.14;
use strict;
use warnings;

my $foo = 'a';
say '$foo = ', $foo;
say 'result = ', $foo =~ s/a/b/r =~ s/b/c/r =~ s/c/x/r;

$ perl ccc.pl
$foo = a
result = x

おしまい。

Leave a Comment