minicpanを工夫してみた
外出時にcpanモジュール入れるのにminicpanを使っていますが、いちいちminicpanを起動して、オプション指定して、使い終わったら落とすという流れがめんどくさかったので、一連の流れをコマンドにしてみた。
(minicpan用のhttpdを常時起動しておいて、PERL_CPANM_OPTを指定しておけばいいだけですけど)
minicpanの保存先を予め決めておいて
minicpan -l ~/perl5/minicpan -r http://mirror/
こんな感じでcpanm_minicpanとして作成した。
#!/usr/bin/env perl use strict; use warnings; use Plack::Builder; use Plack::Middleware::Static; use Plack::Runner; use Test::TCP; my $server = Test::TCP->new ( code => sub { my $port = shift; my $app = builder { enable "Plack::Middleware::Static", path => qr{^/}, root => $ENV{HOME} . '/perl5/minicpan'; }; my @args = ("--port=$port"); unless ( $ENV{DEBUG} ) { push @args, '--access-log=/dev/null'; open STDERR, '>', '/dev/null' or die $!; open STDOUT, '>', '/dev/null' or die $!; } my $runner = Plack::Runner->new; $runner->parse_options(@args); $runner->run($app); }, ); printf STDERR "Start minicpan server: 0.0.0.0:%s (pid: %d)\n\n", $server->port, $server->pid; my $port = $server->port; system 'cpanm', '--mirror-only', "--mirror=http://localhost:$port/", @ARGV; printf STDERR "\nStopping minicpan server: 0.0.0.0:%s (pid: %d)", $server->port, $server->pid; undef $server;
zsh functionの_cpanmの補完対象に追加しておけば、補完も効く。