2011年3月アーカイブ

2011年3月26日
| コメント(0) | トラックバック(0) AutoInstall.pmとlib::xiとWindows

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」という名前のフォルダだけは作っておきましょう。

未だにNanoAを使ってみたりしています。
Mojoliciousも面白いのですが、ファイルの操作(Mojo::Asset::File)に慣れないため、ついついPath::Classとか使ってしまうのですが、それだとMojoliciousを使っている意味が無いような気がして…。

閑話休題。
NanoAで使うテンプレートを書いていて、今更気づいたというか、見かけていたはずなのに理解出来ていなかったことがようやく理解できたので、恥を晒してみます。

Google検索

Last.fm

このアーカイブについて

このページには、2011年3月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年2月です。

次のアーカイブは2011年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type