that they are only guaranteed to be defined after a
successful match that was executed with the C (preserve) modifier.
The use of these variables incurs no global performance penalty, unlike
their punctuation char equivalents, however at the trade-off that you
have to tell perl when you want to use them. As of Perl 5.20, these three
variables are equivalent to C<$`>, C<$&> and C<$'>, and C is ignored.
X X
=end original
この問題に対するもう一つの解決策として、Perl 5.10.0 からは
C<$`>, C<$&>, C<$'> と
等価だけれども C
(preseve) 修飾子を伴って実行されたマッチングが
成功した後でのみ定義されることが保証される C<${^PREMATCH}>、
C<${^MATCH}> 及び C<${^POSTMATCH}> を導入しました。
これらの変数の使用は利用したいときに perl に伝える必要がある代わりに、
等価な記号変数とは違い全体的なパフォーマンスの低下を引き起こしません。
Perl 5.20 からこれら三つの変数は C<$`>, C<$&>, C<$'> と等価となり、
C は無視されます。
X X
=head2 Quoting metacharacters
(メタ文字のクォート)
=begin original
Backslashed metacharacters in Perl are alphanumeric, such as C<\b>,
C<\w>, C<\n>. Unlike some other regular expression languages, there
are no backslashed symbols that aren't alphanumeric. So anything
that looks like \\, \(, \), \[, \], \{, or \} is always
interpreted as a literal character, not a metacharacter. This was
once used in a common idiom to disable or quote the special meanings
of regular expression metacharacters in a string that you want to
use for a pattern. Simply quote all non-"word" characters:
=end original
Perl においてバックスラッシュで表現されるメタ文字は C<\b>, C<\w>,
C<\n> のように英数字です。
他の正規表現言語とは異なり、英数字でないシンボルのバックスラッシュは
ありません。
なので \\, \(, \), \[, \], \{, \} といったものは全てメタ文字ではなく
リテラル文字です。
これはパターンで使いたい文字列の中で正規表現のメタ文字としての特殊な意味を
無効化またはクォートするための一般的な指標として使われてきました。
「単語」でない全ての文字は単にクォートします:
$pattern =~ s/(\W)/\\$1/g;
=begin original
(If C