CPANモジュールのバージョン一覧。
サーバーが沢山あるので、どのサーバーに、
どのバージョンのCPANモジュールが入ってるのか、わからない状況。
てな訳で、それは非常にデンジャーなので
バージョン調べる方法を検討してたらば。
perldoc perllocal は見難い上に
podだからか、なんだか表示が遅い。
かくして、面倒だから直接 perllocal.pod から
必要なところだけ読み込んでみた。
これでいいのか、まだ実際の環境で試してないけど
超適当に書いたので、メモ。
open IN, '-|' とかやらずに、`` 使ってるのは、面倒だからです。真似しないでねー。
#!/usr/bin/perl -wuse strict;
# ----------------------------------------------------------------
# main
# ----------------------------------------------------------------
if (&_searchPerllocal() == 0) {
die("can't open perlocal file");
}
exit;
# ----------------------------------------------------------------
# function
# ----------------------------------------------------------------
sub _searchPerllocal() {
my @perllocalPath = `find \`perl -e 'print "@INC"'\` -type f -name perllocal.pod | uniq`;
foreach my $path (@perllocalPath) {
chomp $path;
print "${path}\n";
return 0 if ! &_getModuleInfo($path);
}
return 1;
}
sub _getModuleInfo($) {
my $perllocalPath = shift;
open IN, $perllocalPath || return 0;
my $moduleName = '';
my %moduleInfo = ();
while (<IN>) {
next if ! /C<(Module)> L<([^|]+)/ && ! /C<(VERSION): ([^>]+)/;
if ($1 eq 'Module') {
$moduleName = $2;
} else {
$moduleInfo{$moduleName}= $2;
}
}
close IN;
&_showModuleVersion(\%moduleInfo);
return 1;
}
sub _showModuleVersion(\%) {
my $refModuleInfo = shift;
foreach my $moduleName (sort {$a cmp $b} keys %{$refModuleInfo}) {
printf "%-30s\t%s\n", $moduleName, $refModuleInfo->{$moduleName};
}
}
# end of this script