qr のメリットがわからない
Perl にはクォーテーションと同義の表記
my $s; $s = q{abc}; # 'abc' $s = qq{abc}; # "abc" $s = qx{abc}; # `abc` my @a = qw{a b c}; # ('a', 'b', 'c')
などがあります。ウェブアプリで HTML に文字列を埋め込むときなど,ダブルクォーテーションを使ったりしますから重宝します。
my $s = qq~<img src="${image_file}" />~;
とか。あと qw もよくつかいますね。
my $qr = qr/[a-z]+/; my $str = '123abcABC'; $str =~ m/${qr}/;
こんな感じで正規表現をあらかじめコンパイルして再利用できます。
でも,qr// のところは,実は q{} や qq{} ,もっといえば普通の変数でも実際に使うときに正規表現として展開されます。
my $qq = "[a-z]+"; my $str = '123abcABC'; $str =~ m/${qq}/;
簡単なベンチマークをとってみたのですが,qr の方が圧倒的に速いというシチュエーションには巡りあえませんでした。とても複雑な正規表現でないと差がでてこないのでしょうか。
ちなみに,実行時(というかコンパイルフェーズ時)一度だけ正規表現をコンパイルするオプション「o」がありますが
my $str = '123abcABC'; $str =~ m/[a-z]+/o;
これはスピードの面ではかなり効果的でした。