カレッヂ |
質問者 SAYOKO
投稿日 7/23(月) 17:06:50
cgiプログラム内で受注内容を「注文書の写し」として発注者にメールを発行・送信しますが、 価格表示(ドル)の小数点が消えて以下が改行されてしまいます。 同様に送信される「注文書」は正常で、cart.cgiファイルの問題箇所を見ていますが、 Perlを詳しくマスターしていないので修正できません。 「注文書」と「注文書の写し」を発行・送信する箇所と思われる部分をコピーしますので、 恐れ入りますが、修正部分と修正方法をお教え頂きたいのですが、是非に宜しくお願いします。 両者で記述が違うと思った部分の左隅に★印をします。 注文書の発行・送信箇所----------------------------------------------------------- if (!open(INFO,$info_file)) { &error("!設定エラー","特定商取引に関する表\示について設定したファイルが見つかりません。"); } @info = <INFO>; close(INFO); if (open(ADDR,">> $order_csv")) { foreach $write (@formCSV) { if ($write eq '$NUMBER') { push(@CSV,$date_num); } elsif ($write eq '$ORDER') { $orders =~ s/\n//g; push(@CSV,$orders); } elsif ($write eq '$DATE') { push(@CSV,$date_now); } elsif ($write eq '$EMAIL') { push(@CSV,$in{'_email'}); } elsif ($write eq '$REMOTE_USER') { push(@CSV,$REMOTE_USER); } else { $write =~ s/"/"/g; $write =~ s/&/&/g; $write =~ s/</</g; $write =~ s/>/>/g; push(@CSV,$in{$write}); } } print ADDR &EncodeCSV(@CSV) . "\n"; close(ADDR); } if (!open(OUT,"| $sendmail -t")) { &error("異常停止",$!); } print OUT &jis("X-Processed: $date_now\n"); print OUT "X-SENDER: $REMOTE_HOST\[$REMOTE_ADDR\]\n"; print OUT &jis("X-AGENT: $HTTP_USER_AGENT\n"); print OUT "From: $mailto_order\n"; print OUT "To: $mailto_order\n"; print OUT "Reply-To: $in{'_email'}\n"; print OUT &jis("Subject: [$date_num] $mail_subject\n"); print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain; charset=iso-2022-jp\n\n"; print OUT "\n"; foreach (@in) { s/"/"/g; s/&/&/g; s/</</g; s/>/>/g; ★ if (/^\.\t(.*)/) { print OUT &jis("$1\n"); } elsif (/(.*)\t(.*)/) { print OUT &jis("[$1]\n$2\n\n"); } } print OUT "\n"; print OUT &jis("$sign\n"); close(OUT); sleep(1); 注文書の写しの発行・送信箇所----------------------------------------------------- if (!open(OUT,"| $sendmail -t")) { &error("異常停止",$!); } print OUT &jis("X-Processed: $date_now\n"); print OUT "X-SENDER: $REMOTE_HOST\[$REMOTE_ADDR\]\n"; print OUT &jis("X-AGENT: $HTTP_USER_AGENT\n"); print OUT "From: $mailto_order\n"; print OUT "To: $in{'_email'}\n"; print OUT &jis("Subject: [$date_num] $copy_subject\n"); print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain; charset=iso-2022-jp\n\n"; print OUT &jis("$mail_mes\n"); print OUT "\n"; foreach (@in) { s/"/"/g; s/&/&/g; s/</</g; s/>/>/g; ★ if (/^\.\t(.*)/) { $l = $1; $l =~ s/\./\n/g; print OUT &jis("$l\n"); } elsif (/(.*)\t(.*)/) { print OUT &jis("[$1]\n$2\n\n"); } } print OUT "\n"; print OUT &jis("---特定商取引に関する法律による表\示---\n\n"); foreach (@info) { print OUT &jis($_); } print OUT "\n"; print OUT &jis("$sign\n"); close(OUT); 1 while $date_num =~ s/(.*\d)(\d\d\d\d)/$1-$2/g; print "Set-Cookie: $ENV{'SCRIPT_NAME'}:0=$cookie_set\n"; |
回答者 yaku sima
[削除]
投稿日 7/24(火) 00:43:11
またまた、yaku simaです。今回は意図しない正規表現でのエラーですね。 orig>if (/^\.\t(.*)/) { print OUT &jis("$1\n"); } copy>if (/^\.\t(.*)/) { $l = $1; $l =~ s/\./\n/g; print OUT &jis("$l\n"); } 小数点で改行される原因は、 $l=~s/\./\n/g; です。ここでは、例えば、($pi=atan2(1,1)*4;) .\t3.14159265358979 なら、if文の条件文で$_=~/^\.\t(.*)/ となっているので、$1には3.14159265358979 が入りますね。そして、$1は変数でないので、$line($lは見にくいので)なるグローバル変数を一時作って、それに代入します。 次にこの$line をs///gで$line 内のすべてのdot(.)を改行(\n)に置換しています。それをprint OUT jis("$line\n") しています。したがって、 3\n14159265358979 と表示されのでしょう。 >価格表示(ドル)の小数点が消えて以下が改行されてしまいます。 小数点がほしければ、わたしならcopyを一寸修正して、 copy>if (/^\.\t(.*)/) { $l = $1; $l =~ s/\./\n/g; print OUT &jis("$l\n"); } /^\.\t(.*)/ and print OUT jis("$1\n"); と、こう書きます。origのままでも同じです。 正規表現もがんばってくださいね。 |
返信(回答)する
Web裏技 |