qr/STRING/imosx演算子

Perlqr() 演算子を実行する瞬間にパターンをコンパイルするので、 qr() を使うことでいくつかの場面で速度的に有利になります。 特に qr() の結果が独立して使われる場合に有利になります。

sub match {
my $patterns = shift;
my @compiled = map qr/$_/i, @$patterns;
grep {
my $success = 0;
foreach my $pat (@compiled) {
$success = 1, last if /$pat/;
}
$success;
} @_;
}

qr() の時点でパターンを内部表現にプリコンパイルすることにより、 /$pat/ を試みる毎に毎回パターンを再コンパイルするのを避けることができます (Perl はその他にも多くの内部最適化を行いますが、 上の例で qr() 演算子を使わなかった場合はどの最適化も行われません)。

ほげほげ