メタ文字をエスケープ(置換する方法)
[上に]
[前に]
[次に]
デニム
2000/01/15(土) 07:46:48
$mail の中に@が含まれていたら、これをダブルクォーテションの中で
記述しても問題の無いように@の前に\を付けるよう置換したいのですが
$mail =~s/@/\@/;
としても、上手く行きません。
良い方法がありましたらご教授下さい。
B-Cus
2000/01/15(土) 07:50:43
$mail の中に @ が含まれていたからといって、
$hoge="$mail";
などとしてエラーになりますか?
> $mail =~s/@/\@/;
$mail =~s/@/\\@/;
匿名不希望
2000/01/15(土) 07:56:22
B-Cus さんが書かれたとおり、
そもそも置換しなくて良いのでは?
デニム
2000/01/15(土) 08:25:46
説明不足ですいません。
ヒアドキュメントの中で展開して、それをsendmailで送信
するよう書いているのですが、
perl4だと、
$message = <<END_OF_MESSAGE;
Subject: メールです
To: $mail
Reply-To: $mailback
From: $mailback
で、正常に動作するのですが
perl5では、<<END_OF_MESSAGE; を
クォーテーション又はダブルクォーテションで囲まないと機能せず
'だと変数展開されず、"だとエラーになっていましたので
先ほどの質問をする経緯となりました。
>$mail =~s/@/\\@/;
どうもです。試してみます。
後ほど、結果を書きにきます
有り難う御座いました。
B-Cus
2000/01/15(土) 08:36:01
> クォーテーション又はダブルクォーテションで囲まないと機能せず
> "だとエラーになっていましたので
そういうことは起こらないと思います。やはり置換は必要ないのでは。
ジェインウェイ大佐
2000/01/15(土) 08:54:34
$mail = "hoge@hoge.com"; これはエラーになります。@以後を配列と見なすから(perl5)
$mail = 'hoge@hoge.com'; これはエラーになりません。@があっても文字列としてしか見ませんから。
$mail = 'hoge@hoge.com';
$email = "$mail"; は変数が展開されてこそ、$email = "hoge@hoge.com"; という風にプログラム内で見られる
訳ですが、展開した変数の中身に@が含まれていても配列とは見なしません。
よってエラーは起きません。
匿名不希望
2000/01/16(日) 07:38:56
一旦、変数の中に入ってしまった '@' は、
単なる文字として扱われるわけですナ
> perl5では、<<END_OF_MESSAGE; を
> クォーテーション又はダブルクォーテションで囲まないと機能せず
もしそれで不具合が出るのでしたら、
別の箇所に問題があるのでは???
> >$mail =~s/@/\\@/;
> どうもです。試してみます。
あれ?
$mail =~s/\@/\\\@/;
のような気も(試していませんが)
いずれにしても、これをやると、例えば
abc@123.ne.jp
などとセットされていた文字列が、
abc\@123.ne.jp
になってしまい、それこそエラーメールの嵐になってしまいます!
[上に]
[前に]
[次に]