Perl4からPerl5に移行すると動かなくなってしまった

[上に] [前に] [次に]
よーこ [E-Mail] 2000/02/01(火) 04:12:54
始めまして。
あまりにも無茶苦茶な質問ですみませんが、かなり切羽詰っている
ものでどうか尋ねさせてください。
プロバイダの使わせてくれるWebサーバーはPerl4だったのですが、
去年末にPerl5にシステムが変わったところ、運用していた
CGIスクリプトが動かなくなってしまいました。
以前のPerl4も残してくれているので、その場所を指定すればPerl4で
使えて済む話ですが、そのサーバーには他に深刻な不具合があるので
やめようと思っています。転居先はPerl5です。
ソースはフリーのCGIスクリプトをただつかわせてもらっているだけで、
改造はサポート外なのが配布もとのスタンスです(当然でしょうけれど)。
当方CGIは殆ど判りません。どこを見れば良いのでしょうか…
Win98にインストールできるPerlがあるとのことですが、それに
デバッグしてもらえたとしてもそれを自分に理解できるかどうかも
わからないですし…

Joinという演算子(?)に対する扱いが変わったのだろうかと
素人考えに見ているのですが…Perl4ではこんなふうに書いていますが

$value = join ("\|",$DATE\,$new_code\,$QUERY{'que'}\,$QUERY{'ans1'}\,$QUERY{'ans2'}\,$QUERY{'ans3'}\,"$QUERY{'ans'}\n");

もしお許しいただけるなら次回はソースのURLを添えます。

よーこ [E-Mail] 2000/02/01(火) 04:16:22
(追記)
上のソースの一文は実際は改行無しで書いています。

気まぐれ 2000/02/01(火) 05:28:28
>Joinという演算子(?)に対する扱いが変わったのだろうかと
なぜ、これが原因だと思うのですか?
エラーメッセージがその行を示しているとか?

確かにカンマの前に \ を付けているので区切り記号ではなく、文字列
として解釈してエラーが出ているようです。

$value = join
("\|",$DATE,$new_code,$QUERY{'que'},$QUERY{'ans1'},$QUERY{'ans2'},$QUERY{'ans3'},"$QUERY{'ans'}\n");

としてみては。
# でも、Perl4でもエラーが出そうな気がするのだけど?

よーこ [E-Mail] 2000/02/01(火) 06:32:42
さっそくのお返事ありがとうございます。
ご指摘の部分、最初と最後の¥以外はお書きのように取り去りましたが、駄目でした。
もともとPerl4ではそれで動いているんです。

なぜJoinに着目したかといいますと、実は長い話で恐縮ですが、

問題のソース:
http://www9.freeweb.ne.jp/cinema/bjsfan/ugokan.txt
は英語版なのですが、これの日本語版がPerl5でちゃんと動いているんです。
その日本語版でperl5で動いているソース:
http://www9.freeweb.ne.jp/cinema/bjsfan/ok.txt

両者の違いは何かといいますと、生成するデータファイルの形式です。
UgokanをPerl4にて動かし、クイズを作成した生成されるデータファイルの例:
http://www9.freeweb.ne.jp/cinema/bjsfan/mondaieigo.txt
OKのデータファイルの例:
http://www9.freeweb.ne.jp/cinema/bjsfan/mondai.txt
英語ではどうしても文中に出てくるカンマを何とかするために
Ugokanであつらえた部分の中に、OKでは使われていなかったJoinが
初めて出てくるので、それでjoin周りが変なのかと素人考えに思った
わけです。実はこれは配布もとの方に無理に作っていただいたものです。
当時、これ以上はサポートできないといわれたもので…
原因がお判りになるようでしたらどうかご指摘くださいm(__)m

aqua-J 2000/02/01(火) 10:29:32
気まぐれさんの意見に賛成
$value = join ("\|", $DATE,$new_code,$QUERY{'que'},$QUERY{'ans1'},$QUERY{'ans2'},$QUERY{'ans3'},"$QUERY{'ans'}\n");
で正常に動きましたよ。
あとは、jcode.plの場所があってるか..かな

よーこ [E-Mail] 2000/02/01(火) 16:53:26
[[解決]]
なんだかわかりませんが、もう一度|すっかり書きなおして送ってみたところうごくように
なりました。(|の前の最初の\まで取ってしまいましたが、これでも動きました。)
いくつもファイルのコピーをバックアップして書きなおしたので
未修正のを何度も送っていたのかも知れません。それにしても以前ので
よくPerl4で動いていたものですね。大変お騒がせしました(jcode.plの
場所はあってました)。簡単な理由で良かったです。もっと深刻な文法の
問題だったら理解を超えているので…
おかげさまでサーバーをすっかり引っ越せます。気まぐれさん、aqua-Jさん、
本当にありがとうございました。

[上に] [前に] [次に]