![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
perlの最適化に取り組む際のa.outについて
下記IBMのサイトを参考にperlの最適化について取り組んでいます。
http://www.ibm.com/developerworks/jp/linux/libra …
現在、意図しているscript.plでは、http://.../script.plにアクセスした場合、現状エラーのない状態です。
その状態で素直に、
$ perlcc -B script.pl
を実行し、a.outというファイルが出来るのを確認しました。
shell上で
$ a.out
を実行すると、ウェブにアクセスした場合に表示される画面が表示されます。
$ mv a.out /var/www/lib/db/Atest
としてリネームしました。
その後、一応パーミッションも実行権限付けました。
●test.cgiとして下記を作成しました。
#!/usr/bin/perl
use lib '/var/www/lib/db';
unshift @INC, '/var/www/lib/db';
use utf8;
use open ":utf8";
use open ":std";
BEGIN{
$| = 1;
print "Content-type: text/html\n\n";
open(STDERR, ">&STDOUT");
}
#1.
system(Atest);
#2.
foreach(`Atest`){
print $_;
}
#3.
open(OUT, "| Atest|");
print OUT;
close(OUT);
1;
Atestの実行結果をWebからのアクセスで表示可能にならないか検証しているのですが、画面は真っ白な状態です。
サーバーのerror.logにも何も表示されません。
上記IBMのサイトで解説されている
抜粋:「perlccはCソースに埋め込まれたものを生成します。このCソースが、完全なスタンドアローンの実行可能ファイルにまでコンパイルされます。」
とあるように、Cが分かっていないと駄目なのでしょうか
Webからアクセス時、表示可能なようにするにはどのようにすれば良いかご教授頂けませんでしょうか
No.1ベストアンサー
- 回答日時:
おそらく
1. system('./Atest');
2. foreach(`./Atest`);
3. open(OUT,"./Atest|");
とかでいけると思いますが、
それ以前に、test.cgi の存在そのものが無駄です。
コンパイルしたバイナリそのもの(perlcc が出力した a.out)を
test.cgi という名前にリネームするだけで十分です。
CGI とは、「WWWサーバから、ユーザープログラムを呼び出すためのルール」です。そのルールに従っていれば、どんなプログラムからでも使うことができます。
(たまたま、CGIが生まれた当時、CGIに適した「テキスト処理」に長けたプログラミング言語としてPerl が主流だったため、CGIといえばPerlという風潮になっただけで、CGIはPerl専用ではありません)
perlcc 元のスクリプトが CGI として動作するPerlプログラムなのであれば、
perlcc が出力した実行プログラムバイナリも CGI として動作します。
テストサーバーではエラーがないのですが、ローカル環境ではライブラリーの読み込み等が不完全な状態でperlcc -B script.plを行って作成されたa.outをテストサーバーにUPして確認していたのが原因だったようです。
仰るとおり、最初、まっさきにa.outをtest.cgiにリネームして確認していたのですが、そもそもローカルで作成したa.outでは、ライブラリーが読み込めていない状態でしたので、その事が原因だったようでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- UNIX・Linux shellscript内のコマンドを、sudo(toor)として実行 2 2022/09/23 15:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
die関数のエラー出力先について
-
改行コードが勝手に
-
プログラムのヒントを下さい
-
window.open でのファイル指定方法
-
VBAでCSVファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
awkスクリプトでダブルクォーテ...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
htaccessで特定のディレクトリ...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
-
エクセルVBAで素数だけを出力す...
-
fgets で値が取得できない
-
エクセルVBA コードが同じでも...
-
配列の中に重複文字列があるか...
-
DOSコマンドで、標準出力を出力...
-
MATLABのm-fileについて
-
openした後、closeしないでプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
perlを用いた特定文字列間の抽...
-
Perl で syntax error
-
ハッシュにファイルハンドル
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
GD.pmで作成した画像を保存する...
-
perlで複数のファイルの処理に...
-
while(<ハンドラ>) {} で行数を...
-
パスワード自動生成スクリプト...
-
die関数のエラー出力先について
-
Perlでファイル出力時にデッド...
-
perlのflock関数でロックをかけ...
-
PICでFatFsでオープンした内容...
-
クリックを何回もされて、重複...
-
cgiの投票回数制限設定について...
-
ファイルから読み込んだ文字を
-
テキストファイルの本文中に行...
-
データの並べ替え
おすすめ情報