Perlバージョンの取得

Perl/CGIプログラム を使って、インターネットサーバーにインストールされている Perlパッケージ のバージョンを調べてみましょう。

Perl/CGIプログラミングをする際、Perl/CGIプログラムを設置するインターネットサーバーにインストールされているPerlパッケージのバージョンを知っておくことはとても大切です。

なぜなら、Perlはバージョンが上がるごとに便利なモジュールが追加されたり、コーディング方法が微妙に変化したりしているからです。

例えば、日本語処理モジュールは Encodeモジュール が使えるのか、それともJcodeモジュールでいくのか…。

少し前であれば、 変数 宣言時に myを使うのかlocalを使うのか など、Perlバージョンに合わせたコーディング方法が必要になってくる場面があるからです。

なので、自分でPerl/CGIプログラムを作成するのであれば、その前に、インターネットサーバーにインストールされているPerlのバージョンぐらいは知っておきましょう。

  1. Perlバージョン表示
  2. Perlバージョンチェックプログラミング

Perlバージョン表示

インターネットサーバーにインストールされているPerlパッケージのバージョンを調べるPerl/CGIプログラムを作成してみましょう。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print $];
exit;

Perl/CGIプログラムサンプル をこちらに設置してみました。

このPerl/CGIプログラムサンプルを実行すると、Perlバージョンを表示します。

Perl/CGIプログラム上で特殊変数「$]」を参照することにより、Perlバージョンとパッチレベルを取得することができます。

特殊変数「$]」に格納されているPerlバージョンとパッチレベルはドット(.)で区切られています。

サーバー上で実行すると、例えば「5.008008」などと表示されます。

Perlバージョン5.6.0以降の場合、特殊変数$]の値は「5.6.0」ではなく「5.006」のように変化するので注意が必要です。

Perlバージョンチェックプログラミング

Perlパッケージのバージョンを調べ、もし、こちらが指定したPerlバージョンを満たしていない場合には、エラーメッセージを出して強制終了するPerl/CGIプログラムを作成してみましょう。

Perlバージョンチェック(1)

Perlのバージョンを格納している特殊変数$]は、そのまま小数点つきの数字として扱うことができます。

なので if文 を使って、Perl/CGIプログラマー側が指定したPerlバージョンと比較させることができます。

#!/usr/bin/perl

print "Content-type: text/html\n\n";
if ($] < 5.006) {
print 'Perl Version Error !';
} else {
print 'OK';
}
exit;

Perl/CGIプログラムサンプル はこちらに設置してあります。

このサーバーにインストールされているPerlのバージョンは、前述のとおりですので「OK」と表示されます。

Perlバージョンチェック(2)

Perlのバージョンチェックには、 require関数 を使って指定のバージョンを取り込ませることによりチェックさせるという方法もあります。

#!/usr/bin/perl

eval {
require 5.6.0;
};
if ($@) {
print "Content-type: text/html\n\n";
print 'Perl Version Error !';
exit;
}

print "Content-type: text/html\n\n";
print 'OK';
exit;

Perl/CGIプログラムサンプル はこちらに設置してあります。

このPerl/CGIプログラムサンプルも、Perlバージョン5.6を下回っている場合にエラーとなります。

なのでこのサーバー上で実行すれば、「OK」と表示されます。

このPerl/CGIプログラムでは、 require関数 を使っているので失敗すれば致命的なエラーとなります。

しかし、eval関数でトラップすることにより、もしrequire関数でのチェックが失敗したとしても、致命的なエラーとなることを避けています。

もしエラーとなる場合は、特殊変数「$@」に値が代入されます。

なので、後から if文 で特殊変数$@の値をチェックすることにより、Perl/CGIプログラム側からPerlのバージョンをチェックすることができるというわけです。