次の例のプリント "SAME":なぜq/\ a/equal q/ a /ですか?
if (q/\\a/ eq q/\a/) {
print "SAME\n";
}
else {
print "DIFFERENT\n";
}
私はこれがdocumentationと一致している理解しています。しかし、私はこの行動が望ましくないと思います。 lilteralを一重引用符で囲んだ文字列にしてエスケープする必要がありますか? 2つのバックラッシュが必要な場合は、4を指定する必要があります。これは便利ではないようです。
バックスラッシュがエスケープ文字として機能するかどうかをPerlで検出しないでください。たとえば、バックスラッシュが区切り文字の前にない場合は、リテラルとして扱う必要があります。それが事実であればと、私は2つ、例えばを表現するために3つのバックスラッシュを必要としない、代わりに
q<a\\\b>.
'q/\ /'を使ってみると、バックスラッシュをエスケープする必要があります。 – cHao
申し訳ありませんが、私は私の元の質問で完全に明確ではありませんでした。バックスラッシュがエスケープ文字として機能しないという事実を強調するために、 "literal"という単語を追加しました。あなたの例は私の問題点をあなたの場合と同じように反映していません。定義によると、区切り文字の前のバックスラッシュはエスケープ文字として機能します。 – Ltf4an
"バックスラッシュが区切り文字の前にない場合は、リテラルとして扱う必要があります。"次に、バックスラッシュで終わる文字列をどのように作成しますか? 'q/\ /' - >リテラルスラッシュ、終了区切り文字なし(構文エラー)。 'q/\\ /' - >リテラルバックスラッシュ、リテラルスラッシュ、終了デリミタなし(構文エラー)。 'q/\\\ /' - >リテラルバックスラッシュ、リテラルバックスラッシュ、リテラルスラッシュ、終了デリミタなし(構文エラー)。 ... – ThisSuitIsBlackNot