私はあなたの最初のコードをしようとすると、私は実際にこのエラーが出る:
Trailing \ in regex m/\/ at foo.pl line 1.
問題が何であるかのヒントです。
=~
オペレータは、いくつかの形式をとることができます。通常、音訳の場合は$str =~ tr/.../.../
、正規表現の検索/置換の場合は$str =~ s/.../.../
、正規表現の場合は$str =~ m/.../
となります。
あなたのコードでは、これらのどれも使用していません。代わりに、一般的な$str =~ EXPR
形式を使用します。これはEXPRを文字列として評価し、その文字列の内容を正規表現として解釈します(m//
のように通常のマッチを実行します)。
あなたの場合(コード1)、結果の文字列は単一のバックスラッシュ(\
)で構成されます。正規表現ではバックスラッシュの後に何かが続く必要があるため、これは有効な正規表現ではありません。そのため、上記のエラーが発生します。
他の例(コード2)では、結果の文字列はDATA\DATA
です。正規表現として解釈すると、これはDATA
に続いて、その後にATA
が続く、数字以外の文字(つまり、\D
は正規表現での意味)と一致します。
この問題を解決するには、することができますいずれかをダブルすべてのバックスラッシュ - 、または単に最初の場所で文字列を使用しない(文字列処理は、文字列リテラルDATA\DATA
をマッチングするための正規表現である、DATA\\DATA
にこのターン):
は、
if ("DATA\\DATA" =~ m/DATA\\DATA/) {
print "yay\n";
}
m//
を使用すると、Perlは正規表現を書いていることを知っているので、正規表現エスケープの上に文字列エスケープを処理する必要はありません。
@melpomeneええ、最近はJavaにも慣れていて、Perlを長い間チェックしていませんでした。それを指摘してくれてありがとう(皮肉なことに)。 – m0skit0