2つ以上のCGIファイルを使う方法を教えてください。
例えば、
#!/usr/bin/perl (1.cgi)
print "Content-type: text/html\n\n";
print '<html><body>';
$t1 = 'abcd';
$t2 = 'EF';
$t1 = &fnc($t1,$t2);
sub fnc{
$s1 = @_[0];
$s2 = @_[1];
return $s1.$s2;
}
print $t1;
print '</html>';
このソースの
'abcd' (2.cgi)
と
$t2 = 'bc'; (3.cgi)
と
sub fnc{ (4.cgi)
$s1 = @_[0];
$s2 = @_[1];
return $s1.$s2;
}
の3つのタイプを外部ファイルとして、全部で4つのCGIに
したいと思っていますが、可能か不可能か、可能であれば
それぞれのCGIファイルのソースを教えてください。
No.2ベストアンサー
- 回答日時:
こんな感じ↓ではどうでしょう?
[main.pl]
require './data.pl';
require './sub.pl';
print $str;
&disp($str);
exit;
[data.pl]
$str = 'abc';
[sub.pl]
return(1);
sub disp {
print "[@_]";
return;
}
No.6
- 回答日時:
.plはPerlの拡張子です。
.cgiはPerlだけとは限りません。
ってこれでは回答にはなってないでしょうか?^^;
あの、先にもどうされたいのかが分かりませんと書かせていただいたのは、質問の意味がわかりませんという意図ではなく、teeeyaさんも指摘されているように、どうしてこのソースを分割したいのでしょうかという意図をこめてのことで書かせていただきました。
そして、思うのですが、2.cgiなどはcgiでなくても、単にtxt(拡張子などは.datなど、任意にすればよいと思いますが)でも構わないのでは?と思うのですがいかがでしょうか?
No.5
- 回答日時:
関数は定義しただけでは値を返しません。
従ってsub fnc1{ #### (2.cgi)
return 'abcd';
}
1;
これではfnc1は値を返しません。
2.cgiの中でfnc1を呼ぶ必要があります。
>*.plをCGIで使う場合には、
>*.plの最初にpackage *;と書くのは必須ですか?
いいえ、全く関係ありません。
packageに関して説明するのは相当骨なので、参考サイトの紹介で勘弁してください。
私の言いたいことは、packageの仕組みを理解していないのならソースファイルの分割はすべきではなく、
packageの仕組みを学習してまでソースファイルの分割
をする必要があるかどうかよくお考えください、
ということです。
参考URL:http://www.rfs.jp/sitebuilder/perl/04/01.html
No.4
- 回答日時:
package宣言はご存知ですか?
これをやらないと、複数のファイルに分けても変数の
スコープが分離しませんので、保守性はかえって低下します。
それを踏まえた上でお読みください。
[1.cgi](呼び出し元)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print '<html><body>';
require '2.cgi';
require '3.cgi';
require '4.cgi';
$t1 = &fnc($t1,$t2);
print $t1;
print '</html>';
[2.cgi]
$t1 = 'abcd';
1;
[3.cgi]
$t2 = 'bc';
1;
[4.cgi]
sub fnc{
$s1 = $_[0];
$s2 = $_[1];
return $s1.$s2;
}
1;
[出力]
Content-type: text/html
<html><body>abcdbc</html>
手元の環境で動作確認しました。各ファイル末尾の1;は
#1の方がおっしゃるとおりです。
この回答への補足
ありがとうございます。
2.cgiでは変数は定義せず、値だけを返したいから
sub fnc1{ #### (2.cgi)
return 'abcd';
}
1;
このようにしました。
やっぱり requireを消さないと処理が止まってしまいます。
package宣言はどのように使えばいいんですか?
jcode.plというファイルを持っています。
最初にpackage jcode;と書いてあるんですが、*.plを
CGIで使う場合には、*.plの最初にpackage *;と書くのは
必須ですか?
No.3
- 回答日時:
しまった。
頭に return(1); を入れてしまった。chuparkさんご指摘のようにsub.plは↓でもOKです。
[sub.pl]
sub disp {
print "[@_]";
return;
}
return(1);
この回答への補足
ありがとうございます。
下記の様に4つのファイルにしたんですが、require
というのを書くと、その時点でCGIの処理が止まってしまう
ようでした。
(1.cgi) は(1.pl)のようにしないと requireは書いては
いけないんですか?
拡張子の .plと .cgiはどのように使い分けるものなんですか?
#!/usr/bin/perl ####### (1.cgi)
print "Content-type: text/html\n\n";
print '<html><body>';
require '2.pl';
require '3.pl';
require '4.pl';
$t1 = &fnc1;
$t1 = &fnc2($t1,$t2);
print $t1;
print '</html>';
sub fnc1{ ####### (2.pl)
return 'abcd';
}
$t2 = 'EF'; ####### (3.pl)
sub fnc2{ ####### (4.pl)
local $s1 = @_[0];
local $s2 = @_[1];
return $s1.$s2;
}
No.1
- 回答日時:
どうされたいのかがよく分からないのですが、
2.cgiや3.cgiはcgiにする必要があるのでしょうか?
4.cgiのようにサブルーチンを外部ファイルに…というのであれば、それぞれをライブラリとしておいて
require を使うというのではどうでしょう?
ライブラリを4.pl としておいたとして、
require '4.pl';
と呼び出せばよいだけだと思います。
ただし、ライブラリファイルの最後には、1;などとしておいて0以外の返り値が戻るようにしておかないとうまく動作しないんだそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- 統計学 t値の計算方法 1 2022/11/29 18:37
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのrequireの動き方について...
-
よくある 『 第○(1・2・3・4・...
-
月の第一週とは
-
VBAでExcelのヘッダーに文字列+...
-
燃えるゴミの日は何曜日ですか?
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
土曜日の26時って何曜日の何時...
-
クライアントのIPとマシン名を...
-
apacheでPerl CGIが作動せず、5...
-
エクセルで相対パスの書き方を...
-
平日朝の国道246線混雑状況につ...
-
VBA。複数のChangeイベントをま...
-
「曜日」の名前、変えるとしたら?
-
DBを10件毎に表示ページング...
-
c言語の質問です。 ある月のカ...
-
cgiで拡張子.cgiと拡張子.pl...
-
バイナリファイルのアップロー...
-
指定曜日にMsgBox表示は可能で...
-
[C#]ListView一覧表示時の幅設...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgiとplとpm
-
perlのrequireの動き方について...
-
jcode.plが読み込めない
-
自CGIのURLのパス部分を取得す...
-
Perlソースを2つのファイルに分...
-
Perlのデバッグ方法って。。。...
-
mt-check.cgiでForbiddenエラー...
-
webからroot権限のコマンドを実...
-
useとrequireでエラー
-
画像のURLの変数を別のCG...
-
Quantifier follows nothing in...
-
require文が実行できない
-
コマンドラインでGET or POSTで...
-
apacheのCGI設定について教えて...
-
Not Found 404エラー時のCGI出力
-
htmlからテキストを返すperlを...
-
perlのcgiで、変数の中身を表示...
-
use CGI
-
フォームでインクリメント入力→...
-
Internal Server Error
おすすめ情報