CGI-BBS > 基礎 > jcode/jcode.pl > jcode::の記述を使えない場合がある


カレッヂ
カレッヂ


質問者 ぶー  投稿日 9/25(木) 18:40:40
----------------------------------------------------------------------
require 'jcode.pl';

for(split(/&/, $query_string)) {
  my ($name, $value) = split(/=/);
  $value =~ tr/+/ /;
  $value =~ s/%([0-9A-F]{2})/pack("C", hex($1))/egi;
  $value =~ s/[\r\n]+/\n/g;
  #jcode::convert(\$value, 'sjis');  # 何故かこれだとコケる↓では使えるのに
  jcode'convert(*value, 'sjis');    # これは通る
  $FORM{$name} = $value;
}
...
省略
...

jcode::convert(\$mail, 'jis');     # 上はダメだけど、ここは通る

----------------------------------------------------------------------
CGIフォームからのパラメータの取得で、jcodeを使用しています。

上記のようなコードですが、
下のjcode::は正常に動作しているのに、
for()の中の方は失敗してしまいます。
jcode'の記述にすると、動作します。

なお、残念ながらサーバのエラーログは見れません。
jcode  jcode.pl,v 2.3 1997/02/23
perl  version = 5.003 
SERVER_SOFTWARE = Apache/1.2.6

とりあえず、jcode'の記述でうまく動いているので問題はないのですが、
悔しいので原因を知りたいです。
どなたか教えてください。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:Win95系
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:pro

回答者 まさ  [削除]  投稿日 9/25(木) 19:33:09
>my ($name, $value) = split(/=/);

このmyを取れば上手く行くでしょう。

質問者 ぶー  [削除]  投稿日 9/26(金) 13:27:01
自己レスです。

結局、jcode.plのバージョンが古いのが問題だったようで、
新しいものにしたところ、無事動作しました。

jcode.pl,v 2.3 1997/02/23 → ダメ
jcode.pl,v 2.13 2000/09/29 → OK
バージョンが下がっているのは気のせいでしょうか!?
でもとにかく、"v.2.3"はperl5以前のものので、"v2.13"はperl5
インタフェースの記述があります。

ちなみに、use strictしてます。
v2.3では、use strictを外して、my をなくしても、動作しませんでした。
でも、下のjcode::convertが通っていたのが謎です…。
ご回答どうもありがとうごさいました。>まささん

返信(回答)する

 


Web裏技