|
>>2207 68user おお,なるほど!ありがとうございます。 ダミーを送るのなら,それをわざわざ対象文字列に結合しなくても いいわけですね。私が間抜けでした。 文字コードを調べるスクリプトが面白いですね(勉強になります)。 今回の件を自分のCGI向けに最小限にカスタマイズした(つもりの) スクリプトが下記です。 #--------------------------------------------------------- read(STDIN,$input,$ENV{'CONTENT_LENGTH'}); @parts = split(/&/,$input); foreach(@parts) { ($key,$val) = split(/=/); $val =~ tr/+/ /; $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; $code = &jcode::getcode(\$key); jcode::convert(\$key,'euc',$code); jcode::convert(\$val,'euc',$code,"z"); $val =~ s/\r\n|\r|\n//g; $val =~ s/,/,/g; $in{$key} = $val; } #--------------------------------------------------------- 入力項目名に半角カナ以外の日本語を使用することが前提なので, 汎用性はありません。 getcode関数を全項目に使っているところが余分なのですが, 見た目は,以前に比べてすっきりしました。 ところで, > ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//; ここはassistの中身のみを残して残りを消す作業だと思うのですが, ($assist_code)にカッコがついている理由と, 正規表現内のカッコの数が合わない理由を教えてください。 ・「行の先頭」または「&の直後」にある「assist=」 ・「任意の1文字の0回以上の最短マッチ」 ・「行の終わり」または「&の直前」 と,部分的にしか理解できませんでした。 |
|
>>2208 shii おいらはこう書くべきと思うけどな my ($assist_code) = $input =~ /(?:^|&)assist=([^&]*)/; どうせassist=なんじゃら、なんて残ってたって関係ないし。 > 正規表現内のカッコの数が合わない理由を教えてください。 ミスだねこれは だいたい、これだと > ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//; $assist_codeに入るのは(^|&)の部分になっちゃう |
|
>2207 68user >もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、 > # make uninstall これでうまくいきました。ありがとうございました。 |
|
メールを送るCGIについて。 フォームに入力されたメールアドレスに対して、Sendmailを使って CGI(Perl)からメールを送る時のことです。 ユーザやホスト名などが間違ったメールアドレスを入力しても、外部の サーバ宛てなら、正常にCGIが終了し、エラーメールが戻ってきます。 ここまでは良いのですが、CGIやSendmailがあるサーバと同じサーバ 宛てにメールを送る場合、アドレスが正しければもちろん正常にCGI は終了し、メールは届きますが、UserUnknownになるようなメールアド レスを指定して送ると、正常にCGIは終了せず、サーバエラーになっ てしまいます。 このようなサーバエラーを回避する方法はあるのでしょうか? どなたか教えて下さい。よろしくお願いします。 |