y は,速いよ
こんな感じのコードを見たので,
やっぱy/// じゃね?と思ってベンチしてみた.
$count = $str =~ s/(\w)/$1/g;
結論的には,y/// の方がs/// や m// と対称性があって良いような気がする.ってことかな?
あと,1バイト削れるしね.ゴルファーも安心.
ということで,y をもっと使おう.
debian$ perl ./y_s_m.pl Rate m s y y_f m 271/s -- -9% -78% -95% s 297/s 9% -- -76% -94% y 1259/s 364% 325% -- -77% y_f 5376/s 1883% 1713% 327% -- debian$ perl -v|egrep perl, This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
#!/usr/bin/env perl use strict; use warnings; use utf8; use Benchmark qw(cmpthese); my $count = 5_000; my $size = 100; my $str = q{awWwWz} x $size; my $re = q{wWwW}; my $y_f = eval qq|sub {\$_[0]=~y/$re//}|; cmpthese($count, { s => sub { my $count = $str =~ s/([$re])/$1/g; die unless ($count == $size * 4); }, m => sub { my $count = (@_ = $str =~ m/[$re]/g); die unless ($count == $size * 4); }, y => sub { my $count = eval qq|\$str =~ y/$re//|; die unless ($count == $size * 4); }, y_f => sub { my $count = $y_f->($str); die unless ($count == $size * 4); }, });