- ベストアンサー
jcodeコンバート後の置換処理が無効になる理由
- jcodeコンバートさせた後に置換処理を行うと、置換処理が無効になることがあります。
- 置換処理を行う前にjcodeコンバートを行っていれば、正常に置換処理が行われます。
- しかし、jcodeコンバートの後に置換処理を行うと、コンバートされた文字列が置換されずに残ってしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
if文を追加しても変りありません。 どんなデータを食わせたときに異常動作しているのでしょうか? Perlのバージョンが違いますが(こちらは5.8.8)、 多分これは関係ないでしょうし。 あと記述がPerl4時代のものなのが気になりますが これも違うような… #5.8.xなら標準でEncodeモジュールが使えるはずです あ、一つだけ試してみてもらえますか? &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); ここを &jcode::convert(\$name,'sjis'); &jcode::convert(\$value,'sjis'); のようにしてみてください。 'は変えなくてもいいのですがまあ気分の問題です。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
require 'jcode.pl'; my @pairs = qw(foo=bar:baz,quux hello=wo,rl:d); foreach my $pair (@pairs) { my ($name, $value) = split(/=/, $pair); &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); $value =~ s/://g; $value =~ s/,//g; print "\$value='$value'\n"; } というスクリプトを試しに作ってみて確かめてみましたが 置換は行われました。 再現できるデータはどのようなものですか? できればお使いのPerlのバージョンとjcode.plの バージョンをお知らせください。
補足
perl:5.8.5 / jcode.pl:v 2.8 どうも途中から入れた#この部分が原因でした。質問書き込み時にはここは無関係だろうと思い込み省略してしまいました。 でも途中でこの部分を入れてしまうとなぜだめなんでしょうか? foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); #---この部分が原因でした。---- if ($INPUT{$name}) { $INPUT{$name} = $INPUT{$name}.",".$value; } else { $INPUT{$name} = $value; } #---ここまで---- $value =~ s/://g; $value =~ s/,//g; }
お礼
sakusaker7さん、御検証下さりありがとうございます。 大変面目ないのですが、そもそもの原因はソース内部での以下のところ、$cgiurlの記述部分に修正前(削除ソースなし)プログラムへのリンク記載が残っており、おかしな挙動をしていただけでした。色々ありがとうございました。 <form action="$cgiurl" method="post">