注:まだ本当にレンタルサーバーでは試してないです。
思い立ってすっげぇ簡単なスクリプトを書いてみた。local::libを同梱する必要があるのと、~/perl5と.cpanがスクリプト実行ユーザー権限で書き込み・読み込みできる必要がある。
#!/usr/local/bin/perl
use local::lib qw(/home/daisuke/perl5);
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CPAN;
sub main {
local $| = 1;
my $q = CGI->new;
if ($q->param('mode') eq 'install') {
install($q);
} else {
control($q);
}
}
sub install {
my $q = shift;
print $q->header('text/plain');
CPAN::Shell->install($q->param('module'));
}
sub control {
my $q = shift;
print
$q->header(),
$q->start_html(),
;
print
$q->start_form(-action => $ENV{SCRIPT_NAME}, -method => 'GET');
print $q->textfield(
-name => 'module',
-size => 30,
-value => $q->param('module')
);
if ($q->param('module')) {
my $mod;
{
local *STDOUT;
close(STDOUT);
$mod = CPAN::Shell->expandany($q->param('module'));
}
if (! $mod || ! $mod->inst_version) {
print $q->div($q->param('module') . ": Not installed"); } else {
print $q->div(
($q->param('module')) . ": Installed version is " . $mod->inst_v
ersion);
}
}
print
$q->submit(-name => 'mode', -value => 'check'),
$q->submit(-name => 'mode', -value => 'install'),
;
print
$q->end_form(),
$q->end_html();
}
main();