5部 関数リファレンス

qr

qr/STRING/imosx



この演算子はSTRINGを正規表現としてクォートします (可能ならコンパイルします)。引数STRINGm/PATTERN/内のPATTERNと同様に文字変換されます。
ダブルクォーテーション( " )がデリミタとして使用された場合、文字変換は行われません。

簡単な使い方

# $patternの値を正規表現としてクォート
$re = qr/$pattern/;

# qrの返却値を利用してマッチング
$string =~ /$re/;

上記のように、qrの返却値はパターンマッチのサブパターンとして使えます。

Perlqr演算子を実行する際にパターンをコンパイルするので、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 拡張正規表現を使う

関連記事