久しぶりにPerlとCPANについて調べてみた

久しぶりにPerlを使ったプログラミングをしているのですが、下記の資料は大変参考になりました。

モダンPerl入門では、CPANライブラリの作成方法について基本的なことが書いてあるので、その内容をベースに環境を用意してから、Perl逆引きクイックリファレンスやWeb上の資料を参考にして開発をしました。オブジェクト指向プログラミングで開発をしていますが、Perlでは型がなく、値によって文字列にしたり数値にしたりと、自動変換してしまうので、そのあたりがはまりやすくて苦労するところです。文字列として認識してもらいたい’1234’を数値1234とされてしまったりするので、そのあたりについて判定をするような処理を入れたり。

つくづく、型指定が必要なインタフェースとは相性が悪い、と実感しました。Perlだけで構築するネットワークシステムでは問題にならないのでしょうが、多くのプログラミング言語をサポートするネットワークシステムでは、ネットワーク通信用インタフェースでは型指定をするものが採用されやすいので、そういう場合はPerlは不利な感じがします。型を採用するプログラミング言語と同程度の苦労をPerlでもすることになる、というぐらいの話ですが、本来のPerlで可能な手軽さというのがなくなってしまってストレスを感じることになるのでしょう。

ところでCPANでのライブラリ管理とyumでのライブラリ管理と、どちらがいいかな、という話があります。OSでサポートするパッケージに依存するperlパッケージライブラリについては、yumの方で管理するべきです。yumで提供されていないperlパッケージライブラリについてはCPANでインストールするしかないので、そちらで管理です。問題になるのは、CPAN側でperlパッケージライブラリがアップデートされて依存関係にあるperlパッケージライブラリがyumで管理されているものがある場合です。yumで提供されているperlパッケージライブラリについては自動アップデート対象外として、perlパッケージライブラリアップデート時に依存関係で問題が発生する場合はアップデートを保留するという方法で対応するしかありません。

調べたところ、古くなっているモジュールの一覧は下記で取得できます。

$ perl -MCPAN -e 'CPAN::Shell->r'

古くなっているのを一括してバージョンアップするには下記のとおりです。

$ sudo perl -MCPAN -e 'CPAN::Shell->install(CPAN::Shell->r)'

perl本体をバージョンアップしたときに、既存環境にインストールされていたモジュールを一括してインストールするには、Bundleというものを使えば良いようです。

$ sudo perl-5.6 -MCPAN -e autobundle
$ sudo perl-5.8 -MCPAN -e 'install Bundle::Snapshot_2004_06_16_00'

ちなみに対話モードで利用するときに、yum -y のような使い方をしたい場合は、環境変数 PERL_AUTOINSTALLを指定すれば良いそうです。

PERL_AUTOINSTALL='--defaultdeps' cpan -i Some::Module

prerequisites_policyの設定値を変更するという方法もあるようですが、全部のパッケージについて適用されてしまうので、こちらは注意が必要です。もとに戻す場合は、prerequisites_policyへ指定する値をfollowではなくaskとします。

$ sudo cpan
cpan> o conf prerequisites_policy follow
cpan> o conf commit
同じタグの記事: CPAN
同じタグの記事: Perl
同じカテゴリの記事: Program
関連書籍: Perl