2011年10月29日土曜日

perl でモジュールの存在を確認する方法

perl で、使いたいモジュールがシステムにインストールされていない場合に、use hoge.pm のエラー(例外)を捕捉する方法を調べました。
「Perl クックブック VOLUME 1」のレシピ 12.2 に書いてあるのですが、次のような具合にします。
BEGIN {
        $zlib = "Compress::Zlib" ;
        unless (eval "use $zlib ; 1") {
                #warn "WARNING: couldn't use $zlib" ;  # 警告出すか否かは文脈次第
                undef $zlib ;  # あとでこの変数を確認することで、代替処理やエラー処理
        }
}
具体的な利用局面について補足しますと、gzip ファイルデータを直接扱いたかったのですが、わたしの主戦場である RHEL/CentOS では、Compress::Zlib が別パッケージ (perl-Compress-Zlib) になっており、必ずしもインストールされていないため、その場合、仕方ないので gzip コマンドを呼ぶという代行処理を行う必要がありました。

Python の”電池が付属しています”思想のように、perl でもこのあたりまでデフォルトで入っていてくれると手間が減るのにと思ってしまいます。Python の場合、かなり昔から gzip ライブラリが標準で入っているようです。

■関連記事
Perl のモジュール(.pm)のパスを調べたい

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ