地道な作業中
モジュールのバージョン
Catalystをベースにしたアプリケーションのインストール方法を書いていて,資料内で説明したモジュールのバージョンを書いてみようと思いました.ircでcharsbarとlestrratに相談しながらできたのがこれ.CatalystとCatalystが呼び出しているモジュール一覧とそのバージョンを取得するには,
$ 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が返って来る行は変ですが,説明用の元資料としては充分使えそうです.