• ベストアンサー

jcode.pl と &ReadParse()

CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

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

  • ベストアンサー
  • burn
  • ベストアンサー率65% (25/38)
回答No.2

cgi-libの中に「sub ReadParse」が必ずあります。 多分、大文字・小文字が違っていたのでは? 私の使っているcgi-lib.plのバージョンでは54行目にあります。 >>require './jcode.pl'; の方を消して、 >>CGIエラーは発生しませんでした。 というのは、A__さんが作られているperlのプログラムの 中で、jcode.plのサブルーチンを呼び出していないからです。 jcode.plは日本語変換ライブラリーです。 perlで呼び出すサブルーチンは &jcode'convert(*変数,'sjis'); で、これを使っていなければエラーは起こりません。 ちなみに、&jcodeを使っていないと言う事は、特にフォームからデータをPOSTなどで受け渡しされていないと言う事でしょうか。 もし、データをブラウザなどから渡されるのであれば、 &jcodeは必須ですよ。 日本語はEUCとS-JISの2種類ありますから、どちらかに合わさないと、文字化けしてしまいます。

A__
質問者

補足

今また cgi-lib.pl を検索したら、ReadParse が いつくかありました。 ありがとうございます。何か間違った検索をしていたのかも しれません。 &jcode'convert(*変数,'sjis'); とかの説明もありがとうございます。 それも使っていたのだけど、&ReadParse() って何だろう と疑問に思ってから、ソースを削って &ReadParse() の意味が 分からないかと実験していたところでした。 &ReadParse(); とは、cgi-lib.pl にある 環境変数をPerlの配列変数に置き換えるもの なんですね。 ありがとうございました。

その他の回答 (1)

  • burn
  • ベストアンサー率65% (25/38)
回答No.1

requireというのは、呼び出す外部サブルーチンを定義する関数です。 &ReadPauseは外部サブルーチンである、cgi-lib.plの中に あるサブルーチンを呼び出しています。 当然requireで定義していないと、ReadPause所在がわからずエラーになります。 cgi-lib.plをエディタで開いて、ReadPauseを探してみてください。ありますよ。 ちなみに、ReadPauseは、CGIに渡される環境変数をPerlの配列変数に置き換えてくれる、ありがたいサブルーチンです。 これを自分で作るとなると一苦労です。

A__
質問者

補足

&ReadParse() とは、cgi-lib.pl の方に関係していたんですね。  require './jcode.pl'; の方を消して、  require './cgi-lib.pl';  &ReadParse(); にしてもCGIエラーは発生しませんでした。 でも、cgi-lib.pl の中に ReadPause という文字が含まれていませんでした。 cgi-lib.pl のサイズは3636バイトでした。 cgi-lib.pl と &ReadParse() の関係は今だに疑問が残っています。