Script関数

「#--Script」で検索すると確実にヒットします。

この関数は、Perl/CGIプログラムのファイル名を取得します。

この関数を使えば、急にファイル名を変更したくなった場合、ファイル本体の名前を変更するだけですみます。

Page関数のように、自分で自分を呼び出す必要のある場合に便利です。

引数はなく、戻り値でファイル名を返します。

それでは、この関数の流れを見てみましょう。

パスの取得

まずは、Perl/CGIプログラムファイル名までのパスが指定されている変数を参照します。

この関数では、3種類の変数を参照し、何らかの文字列(パス)があればパスの分解にまわしています。

if ($0) {
$string = $0;
} elsif ($ENV{'SCRIPT_NAME'}) {
$string = $ENV{'SCRIPT_NAME'};
} elsif ($ENV{'REQUEST_URI'}) {
$string = $ENV{'REQUEST_URI'};
}

変数「$0」は、主にファイル名のみを取得しますが…。

環境によっては、「$ENV{'SCRIPT_NAME'}」や「$ENV{'REQUEST_URI'}」と同じような値を返すので、この3種類でパスを取得します。

パスの分解

次に、取得したパスを分解しファイル名を取り出します。

今現在では、サーバーのルートディレクトリからファイル名までのパスが取得できています。

イメージ的には、「/…/~/-/ファイル名」という感じです。

ここから、ファイル名のみを取り出します。

my $part = (split(/\?/, $string))[0];
my @parts = split(/\//, $part);
my $name = pop @parts;

最初に「?」より前の部分を取り出します。

これは、ファイル名の後に「?」のみを付加してアクセスする場合があるからです。

次に「/」ごとにパスを分解し、最後のパートを取得すればそれがファイル名になるというわけです。

return $name;

取り出したファイル名を返してこの関数終了です。