地道な作業中

モジュールのバージョン

Catalystをベースにしたアプリケーションのインストール方法を書いていて,資料内で説明したモジュールのバージョンを書いてみようと思いました.ircでcharsbarとlestrratに相談しながらできたのがこれ.CatalystCatalystが呼び出しているモジュール一覧とそのバージョンを取得するには,

$ perl -MCatalyst pmver.pl

のように使います.中身はこんな感じ

#!/bin/perl
use strict;
use warnings;
my ( %i, @m, %m, $d, $p );
%i = %INC;
require LWP::Simple;
require Parse::CPAN::Packages;
$d = LWP::Simple::get("http://www.cpan.org/modules/02packages.details.txt.gz");
$p = Parse::CPAN::Packages->new($d);

map {
    my ( $v1, $v2 );
    s/\.pm$//;
    s{/}{::}g;
    {
        no strict 'refs';
        $v1 = ${ $_ . "::VERSION" } || 'undef';
    }
    $v2 = ( $p->package($_) ) ? $p->package($_)->version : 'undef';
    printf "%-40s %10s %10s\n", $_, $v1, $v2
} ( sort keys %i );

"%INC"からモジュール名を引っ張りだして,それぞれのVERSIONを調べます,ついでにParse::CPAN::Packagesを使ってCPANから最新のバージョン情報を取ってきます.CentOS5.2についてくるperl

Linux host 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux
v5.8.8 built for i386-linux-thread-multi

cpanモジュールを使ってCatalystをインストールした時,呼び出されたモジュールとそれぞれのバージョンは次のようになりました.

モジュール名 インストール済みバージョン CPANのバージョン
::usr::lib::perl5::5.8.8::i386-linux-thread-multi::auto::Storable::autosplit.ix undef undef
AutoLoader 5.60 5.68
Carp 1.04 1.10
Catalyst 5.7015 5.7015
Catalyst::AttrContainer -1, set by base.pm undef
Catalyst::Component -1, set by base.pm undef
Catalyst::Controller undef undef
Catalyst::Exception undef undef
Catalyst::Log undef undef
Catalyst::Request undef undef
Catalyst::Request::Upload undef undef
Catalyst::Response undef undef
Catalyst::Utils undef undef
Class::Accessor 0.31 0.31
Class::Accessor::Fast 0.31 0.31
Class::Data::Inheritable 0.08 0.08
Class::Inspector 1.23 1.23
Class::Struct 0.63 0.63
Config undef undef
Cwd 3.29 3.29
Data::Dump 1.14 1.14
Data::Dumper 2.121_08 2.121
Devel::InnerPackage 0.3 0.3
DynaLoader 1.05 undef
Errno 1.0901 1.10
Exporter 5.58 5.63
Exporter::Heavy 5.58 5.60
Fcntl 1.05 1.06
File::Basename 2.74 2.77
File::Copy 2.09 2.13
File::Find 1.10 1.13
File::Path 1.08 2.07
File::Spec 3.29 3.29
File::Spec::Functions 3.29 3.29
File::Spec::Unix 3.29 3.29
File::stat 1.00 1.01
HTTP::Headers 5.822 5.822
HTTP::Message 5.821 5.821
HTTP::Request 5.818 5.818
IO 1.22 1.23
IO::Dir 1.05 1.06
IO::File 1.13 1.14
IO::Handle 1.25 1.27
IO::Seekable 1.1 1.10
IO::Socket 1.29 1.30
IO::Socket::INET 1.29 1.31
IO::Socket::UNIX 1.22 1.23
List::Util 1.19 1.19
Module::Pluggable::Object 3.6 3.6
NEXT 0.60 0.60
Path::Class 0.16 0.16
Path::Class::Dir undef undef
Path::Class::Entity -1, set by base.pm undef
Path::Class::File undef undef
Scalar::Util 1.19 1.19
SelectSaver 1.01 1.01
Socket 1.78 1.81
Storable 2.15 2.18
Symbol 1.06 1.06
Text::SimpleTable 0.05 0.05
Tie::Hash 1.02 1.03
Time::HiRes 1.86 1.9719
Tree::Simple 1.18 1.18
Tree::Simple::Visitor 1.11 1.11
Tree::Simple::Visitor::FindByUID 0.02 0.02
URI 1.37 1.37
URI::Escape 3.29 3.29
URI::QueryParam undef undef
URI::_generic undef undef
URI::_query undef undef
URI::_server undef undef
URI::http undef undef
URI::https undef undef
XSLoader 0.06 0.10
attributes 0.06 0.09
base 2.07 2.12
bytes 1.02 1.03
constant 1.05 1.17
overload 1.04 1.06
re 0.05 0.08
strict 1.03 1.04
subs 1.00 1.00
utf8 1.06 1.07
vars 1.01 1.01
warnings 1.05 1.06
warnings::register 1.01 1.01

最新じゃないのが結構ありますね.Storableの行や-1が返って来る行は変ですが,説明用の元資料としては充分使えそうです.