エラーをブラウザで見る

エラーがなければそれに越したことはないけれど、開発中のスクリプトではエラーが発生してしまうのはよくあることだ。

問題は、CGIとして実行すると、簡単にエラー出力を見れないこと。ファイルのロックのページで書いた方法では、文法間違いは(Apacheでは)表示されなかった。

で、先日手に入れた「実用 Perlプログラミング(発行所/オライリー・ジャパン)」によれば、「BEGIN」というサブルーチン(?)はコンパイルする前、つまり、全体の文法チェックなどをする前に実行するらしい。

ということは、標準エラー出力の内容を標準出力に出力するような命令(ややこしい言い方(^^;;;)を「BEGIN」に書いておけば、文法エラーもちゃんとブラウザでチェックできる。

あと、1行目は今まで「#!perl」と書いていたけれど、freewebを借りたとき、ここのPerlが「/usr/local/bin/perl」にあるようなので、ローカル環境(のApache)でもこの設定で動くように環境を変更した。で、その環境とは?

Apacheが入っているドライブ、仮に「c:apache」に入っている場合、CGIからディレクトリの「/」を指定すると「c:」が対象になる。これはCGIファイル自体のドライブは関係ないようだ。ということで、ActivePerlならインストールディレクトリを「c:usrlocal」にする。そうすると、実際のPerlは「c:usrlocalbinperl.exe」に存在する。つまり、Apacheで動作しているCGIからは「/usr/local/bin/perl」でPerlが呼び出せることになるのだ。

そういうわけで、これからは「#!/usr/local/bin/perl」で行きます。

また、最初の行に、Perlで使用するオプションを付け加えて書くと、そのオプションをつけて実行してくれる。仮に「-v」をつけると、コンパイルせずにバージョン情報だけを出力してくれた(笑)

一般的には「-w」をつけて、細かいエラーの探索に使えそうだ。このオプションをつけると、変数名の間違い程度なら簡単に判明する。

・・・

今回、ローカル環境から完全に移行するために「jcode.pl」に変更しました。また、同じ理由で、「このスクリプトを実行するのは好ましくない」と思ったので取りやめました。

ちなみに、今のプロバイダのNETAGEでは「#!/usr/bin/perl」です(2000年5月現在)。

ソースコード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/perl -w

BEGIN {
    print "Content-type: text/plain\n\n";
    open(STDERR, ">&STDOUT");
    $| = 1;
}

{
# ...existing code...
comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。