エラーがなければそれに越したことはないけれど、開発中のスクリプトではエラーが発生してしまうのはよくあることだ。
問題は、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月現在)。
ソースコード
|
|