• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jcodeコンバートさせた後の置換処理が無効になるのはなぜ)

jcodeコンバート後の置換処理が無効になる理由

このQ&Aのポイント
  • jcodeコンバートさせた後に置換処理を行うと、置換処理が無効になることがあります。
  • 置換処理を行う前にjcodeコンバートを行っていれば、正常に置換処理が行われます。
  • しかし、jcodeコンバートの後に置換処理を行うと、コンバートされた文字列が置換されずに残ってしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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'); のようにしてみてください。 'は変えなくてもいいのですがまあ気分の問題です。

perlerz10
質問者

お礼

sakusaker7さん、御検証下さりありがとうございます。 大変面目ないのですが、そもそもの原因はソース内部での以下のところ、$cgiurlの記述部分に修正前(削除ソースなし)プログラムへのリンク記載が残っており、おかしな挙動をしていただけでした。色々ありがとうございました。 <form action="$cgiurl" method="post">

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

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の バージョンをお知らせください。

perlerz10
質問者

補足

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; }

関連するQ&A

専門家に質問してみよう