• ベストアンサー

サブルーチンを外部ファイルでまとめる。

幾つかのサブルーチンを複数のCGIで利用します。 現在は各CGIにまったく同じサブルーチンを書いていますが、美しくないです。 これを別ファイルにまとめて呼び出して利用と言うのは出来ないのでしょうか? 試しに「set.pl」や「set.ini」でサブルーチンを保存し、「require」で呼び出そうとしたのですが、500エラーが出ました。 何か設定が必要でしょうか?

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 500はHTTP側のエラー番号なので、「Perl で何か問題が起こっている」といったことくらいしか分かりません。  もしかしたら、単にパスが間違っているだけかもしれないのです。  または、呼び先側 .pl ファイルの最後に 1; を付けてないとか。  その問題が解決すればちゃんと動くはずです。

master-3rd
質問者

お礼

>呼び先側 .pl ファイルの最後に 1; を付けてないとか。 これでした。 返答ありがとうございました<(_ _)>

関連するQ&A

  • 別ファイルのサブルーチン

    別ファイル(chiiki.pl)のパッケージ内にあるサブルーチンの処理を使用するために require './chiiki.pl'; CHIFOU::postlimit; に書いたのですが、エラーとはならないもののまったく動きません。 別ファイルchiiki.plは package CHIFOU; sub postlimit { いくつかの処理 } 1; となっていますがどこか問題があるのでしょうか?

  • 「.pl」ファイルはサブルーチンのようなものなのですか?

    掲示板スクリプトなどを落としてファイルを見ると、「.pl」というファイルがたまにあります。 これはサブルーチン的なやくわりがあるのですか? もしそうなら、どうしてわざわざ「pl」に書き分ける必要があるのでしょうか。すべてひとつの.cgiに書けばいいのに。

    • ベストアンサー
    • Perl
  • requireの使い方がわかりません。

    外部ファイルのサブルーチンを(requireを使って)読み込んで使用したいのですが、どうもうまく行きません。 cgiファイルとplファイル、どっちも作って両方試してみましたがだめでした。 なにかこの方法だとできないことなど制限ってあるのでしょうか。 それとも、何か特別な処理が必要なのでしょうか。 原因が分からず困っています。

    • ベストアンサー
    • CGI
  • サブルーチンと繰り返し処理を使いたい

    今、フォームメールを作っています。 環境はFC3&perl5になります。 複数のチェックボックスがあって、それぞれのチェックボックスの値は「数百文字」のテキストが入っています。 半角72文字で折り返してメールを投げたいので、 fold.plを用いたいのですが、それをサブルーチン化し、かつ数多くのチェックボックスをサブルーチンで改行処理を加えたものをいれたいです。 流れはなんとなくわかるのですが、 変数がどのように記述すればいいかわかりません。 ご教示ください、よろしくお願い致します。 -------------------- require "fold.pl"; require "cgi-lib.pl"; require "jcode.pl"; $q1 = $in{"q1"}; #変数を格納して $q2 = $in{"q2"}; <略> $q35 = $in{"q35"}; while ( ??? < 36) { #35回繰り返し &fold(???); } #流し込みテキストを改行する------------ sub fold{ while (length(@_)) { (my $folded, @_) = fold(@_, 72); $str_fold .= $folded . "\n"; } return $str_fold; $message = <<END_OF_MESSAGE; #メール送信処理 <ヘッダ群(省略)> $q1 $q2 $q3 ... $q35 END_OF_MESSAGE &jcode'convert(*message,'jis'); #j-code.plでメール用に変換 open(MAIL,"|$sendmail -t"); print MAIL $message; close(MAIL);

    • ベストアンサー
    • Perl
  • ファイルを出力させる方法

    CGIを改造中です。 更新記録CGIなのですが、ログとは別に内容を別ファイルに書き出したいと思っています。 質問が大雑把かもしれませんが、まずはどういったことをする必要がありますか? とりあえず、ログ書き込みの後にサブルーチンを設定して、そこで書き出す内容をセットするのだとは思うのですが...

    • ベストアンサー
    • Perl
  • サブルーチンを認識しません。

    perlプログラムで サブルーチンの中で、別のサブルーチンを呼び出していますが、 なぜか認識しません。 KCatchでは以下の表示をしています。 Catch: Mon Sep 22 07:56:36 2003 ------------------------------------------------- [regist.cgi:375:die] Undefined subroutine &main::lock called. > &lock; ------------------------------------------------- regist.cgi with Perl 5.00502 for freebsd サブルーチン名には頭に & を付けて呼び出しています。 サブルーチンは、スクリプトの最後にまとめてあります。 同じサブルーチンは、他のスクリプトでも利用していますが、 エラーは出ていないのですが。 何が原因か、わかりません。 関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。 他のサブルーチンも認識しません。 KCacthの表示は同じ &main::サブルーチン名 called になっています。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • サブルーチン Perl みたいに C言語 で使うには 

    いままで数年HPを運営していたためにCGIを開発する手段として、Perl言語を使用してきました。その後、あるきっかけでC言語をするようになり、理屈上PerlとC言語が似ていました。 いままで、Perlでは開発・デバッグ等を効率よくするためサブルーチンを他のファイルにパッケージファイルとして開発していました。非常に便利でこれがC言語でも同じく使えたらいいなとつくづく思っています。 Perl言語の例 main.cgi(本体のファイル) package.pl(パッケージファイル) 本体ほファイルで実行させ、実行の途中必要なサブルーチンをパッケージファイルから呼び出します。 呼び出すには、 %渡す値=&パッケージ名::サブルーチン名; 同じようにC言語でやるときはどのようにすればいいのでしょうか?

  • SSIで表示させるときの各ファイルのパス

    SSIで日記をトップページに表示させようとしています。 CGIは./cgi-bin/day/に保存してます。 トップでSSI表示(<!--#exec cmd="cgi-bin/day/day.cgi" -->)させるためには各ファイルもそこからのパスが必要ですよね。 (require './cgi-bin/day/jcode.pl';) しかし、こうすると記事を入力するときにエラーが出てしまいます。 (./cgi-bin/day/day.cgiから見るとjcode.plは./cgi-bin/day/cgi-bin/day/の場所になってしまう。その他datファイルも同じ) これを解消する何か良い方法は無いでしょうか? 例えば、「cgi-bin/day/」の位置に指定ファイルが無ければ「./」の位置を探すとか、SSI表示部分は切り離して別ファイルにするとか… 良い方法があったら教えてください。

    • ベストアンサー
    • CGI
  • jcode.pl と &ReadParse()

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

    • ベストアンサー
    • CGI
  • 'cgi-lib.pl'などのファイルの位置は?

    Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

    • ベストアンサー
    • Perl

専門家に質問してみよう