AutoInstall.pmはそのままでは動きません。
lib::xiの方は、cpanmではインストール出来ません。
まあ、どうせWindowsなんて。
と、言っていても仕方ありません。
なんとかしようではありませんか。
AutoInstallが動かないのは、Windowsに「/usr/bin/env」が無いだけなので、ちょっと書き換えれば普通に使えます。
重宝していました。
package AutoInstall;
# perl -MAutoInstall pl.pl
use strict;
use warnings;
BEGIN {
push @INC, sub {
my ($self, $filename) = @_;
my ($modulename) = ($filename =~ /^(.*)\.pm$/m);
return unless $modulename;
$modulename =~ s{/}{::}g;
# system('/usr/bin/env', 'cpanm', $modulename);
system( qq{cpanm $modulename} );
my $result;
foreach my $prefix (@INC) {
ref($prefix) and next;
my $realfilename = "$prefix/$filename";
if (-f $realfilename) {
open my $fh, "<", $realfilename;
return $fh;
}
}
};
}
1;
一方、lib::xiの方は、生のファイルをそのまま使えば動きます。
生のファイルを「xi.pm」という「名前を付けて保存」して、script.plと同じフォルダにある「lib」という名前のフォルダの中にコピーします。
- script.pl - lib - xi.pm
lib::xiはcpanmに対してオプションを設定できるのがいいですね。
最初にフォルダ名を書くと、自動的に「--local-lib」オプションのフォルダ名として認識してくれます。
なので、スクリプトに以下のように書いておくと、
use lib::xi qw/extlib/;
そのスクリプトを実行するごとに、足りないモジュールがあれば、スクリプトと同じフォルダにある「extlib」というフォルダの中にインストールされていきます。
しかも、別途「use lib」しなくても良いので、スクリプトもすっきりです。
ただし、この場合に注意が必要なのは、「extlib」をあらかじめ作っておく必要がある、ということです。
「extlib」以下のフォルダは自動的に作ってくれますので、「extlib」という名前のフォルダだけは作っておきましょう。

