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 | 拡張正規表現を使う |