qr/STRING/imosx
この演算子はSTRINGを正規表現としてクォートします (可能ならコンパイルします)。引数STRINGはm/PATTERN/内のPATTERNと同様に文字変換されます。
ダブルクォーテーション( " )がデリミタとして使用された場合、文字変換は行われません。
簡単な使い方
# $patternの値を正規表現としてクォート $re = qr/$pattern/; # qrの返却値を利用してマッチング $string =~ /$re/;
上記のように、qrの返却値はパターンマッチのサブパターンとして使えます。
Perlはqr演算子を実行する際にパターンをコンパイルするので、qrを使うことでいくつかの場面で速度的に有利になります。特にqrの結果が独立して使われる場合に有利になります。
sub match {
my $patterns = shift;
# $patternsの値(複数)を一括して、正規表現としてクォート
my @compiled = map qr/$_/i, @$patterns;
grep {
my $success = 0;
foreach my $pat (@compiled) {
$success = 1, last if /$pat/;
}
$success;
} @_;
}
qrの時点でパターンを内部表現にプリコンパイルすることにより、 /$pat/
を試みる毎に毎回パターンを再コンパイルするのを避けることができます。
qr演算子のオプションは以下の通りです。
| オプション | 内容 |
|---|---|
| i | パターンマッチにおいて大文字小文字を区別しない |
| m | 文字列を複数行として扱う |
| o | 一度だけコンパイルする |
| s | 文字列を一行として扱う |
| x | 拡張正規表現を使う |