#! /usr/bin/perl # # modcheck.cgi # Perl module check program # List all Perl modules installed in the server and display them and # their versions # Version numbers only display when the packages use $VERSION in it. # # サーバーにインストールされているPerlのモジュールをチェックするプログラム # modcheck.cgiをサーバーにインストールし、ブラウザで表示するとモジュールの # ファイル名、パッケージ名、バージョンのリストが表示されます。 # バージョンは、$VERSIONをPackage内で使っている場合のみ表示されます。 # # 1.001 : 2/15/08 : Added dummy mode # 1.0 : 1/27/08 : Created # # http://www.hidekik.com/ # Copyright(c) 2008, Hideki Kanayama All Rights Reserved use strict; use CGI::Carp qw(fatalsToBrowser); use File::Find; # If include path name into displaying file name, set 1. # If display only file name, set 0. # 表示ファイル名にパス名を含む場合は、1, ファイル名のみの場合は、0。 my $include_path = 0; # サーバーの負担を減らすために実際のモジュールを検索せずにダミーのhtmlを表示するモード my $dummy_mode = 0; # ダミーモードのhtmlファイル my $dummy_html = "modcheck_disp.html"; if ($dummy_mode){ print "Content-Type: text/html\n\n"; if (open(HTML, "< $dummy_html")){ while (){ print; } close(HTML); } else { print "ダミーHTMLファイル$dummy_htmlがオープンできません。\n"; } exit; } my $version = "1.0"; my $lastupdatedyear = "2008"; my $mysite = 'http://www.hidekik.com/'; print < Perl modules
Back

Perl Version : $]
OS Version : $^O

END my @modules; my $count = 1; find (\&wanted, @INC); print <
modcheck.cgi $version
Copyright(c) $lastupdatedyear, hidekik.com
END sub wanted { my $pmname = $File::Find::name; my $pm = $_; if ($pmname =~ /\.pm$/){ if (open (MOD, "< $pmname")){ print "
\n"; my $hit = 0; my $file = $include_path ? $pmname : $pm; print "\n\n"; while (){ if ($hit == 0 and /^\s*package\s+(\S+)\s*;/){ print "\n"; $hit = 1; } elsif ($hit and /VERSION\s*=\s*[\'\"]?\s*([\d\.\w]+)\s*[\'\"]?\s*;/){ print "\n"; last; } } close(MOD); print "\n"; } $count++; } }
  File name Package name Versoin
$count$file$1$1