- [Emacs][Thunderbird]コマンドラインからMessage-IDを指定してメールを開く方法。それをOrgMode(Emacs)からも開けるようにする。
- [ソフトウェア][Perl]tiarraのSystem::SendMessage(ControlPort経由)のログをLog::Channel経由で記録する
- [ソフトウェア][Perl]tiarraのSystem::SendMessage(ControlPort経由)でnick宛に送信するパッチ
- [開発]GNU makeのMakefileに、シェルスクリプトを自然に書くたった一つの方法
- [その他]そして運ばれてくるアイスコーヒー4つ
- [PHP]自分用のphp.iniを透過的に適用させる方法
- [Emacs]org-mode+MobileOrg(+Dropbox)でGTD始めました。オレオレ改造をごっそり公開
- [Emacs]reStructuredTextっぽかったらrst-modeにする(magic-mode-alist)
- [Emacs]NTEmacs23.3でショートカットをw32-symlinksで扱えるようにする
- [その他]0b11111
2008年08月24日
■[Perl][CPAN]CPANモジュールのアンインストール(改良版)
信じられない間違いを犯していましたぁ!!(><)aliasを書き直しました。
もし以前のaliasを持っていたら、見比べてニヤニヤしてくださいヽ(;´Д`)ノ
何かCPANPLUSでdistroprefsが使えない(CPANモジュールのオレオレパッチ - ヒルズで働くholidays-lの技ログ)ので、一旦CPANに戻ってきました。
それで、CPANではアンインストールコマンドが無いので、cpan-uninstall(CPANモジュールのアンインストール - ヒルズで働くholidays-lの技ログ)を使うわけなんですが、色々あってcpan-uninstallを改良しました。
コード(aliasとしてワンライナーで実装)
alias cpan-uninstall='\perl -MExtUtils::Install -MExtUtils::Installed -e "unshift@ARGV,new ExtUtils::Installed;sub a{\@ARGV};uninstall((eval{a->[0]->packlist(a->[1])}||do{require CPAN;a->[0]->packlist(CPAN::Shell->expandany(a->[1])->distribution->base_id=~m/(.*)-[^-]+$/)})->packlist_file,1,a->[2])"'
改良点
- ExtUtils::Installedを使って.packlistの位置を調べるようにした
- ディストリビューション名じゃなかったら、CPANを使ってディストリビューション名を調べるようにした
- cpan-uninstallの第2引数に実際のアンインストールを行なうかどうか指定できるようにした(--dry-run)。cpan-uninstall ack 1と書けばファイル一覧だけ表示して終了します(真なら何でも良いので cpan-uninstall ack -nでも良い)
- "$"を使わずに書いた($を使うとシェルに拾われてしまってちょっと面倒)
4番目を実現するために
unshift @ARGV, ExtUtils::Installed->new; sub a{\@ARGV}; a->[0]->packlist(a->[1]);
というちょっとトリッキーな書き方をしています。perlでalias書くときにはちょっと便利&面白いんじゃないかなーと思います。
ARGVに関係無いデータ(ExtUtils::Installedオブジェクト)を突っ込んでるのがアレなんで、
sub a{+{ARGV=>\@ARGV,e=>new ExtUtils::Installed}}; a->{e}->packlist(a->{ARGV}->[0]);
とするのが妥当なのかもしれませんが・・・、ワンライナーなのでご勘弁^^;
最後に実行の様子でも。
# ディストリビューションを指定した場合 % sudo cpan-uninstall ack unlink /usr/bin/ack unlink /usr/lib/perl5/site_perl/5.10/App/Ack.pm unlink /usr/lib/perl5/site_perl/5.10/i386-linux-thread-multi/auto/ack/.packlist # モジュールを指定した場合(自動的にディストリビューション名を調べてくれる) % sudo cpan-uninstall App::Ack CPAN: File::HomeDir loaded ok (v0.80) CPAN: Storable loaded ok (v2.18) Going to read /var/tmp/.cpan/Metadata Database was generated on Sat, 23 Aug 2008 02:03:21 GMT CPAN: YAML loaded ok (v0.66) Going to read /var/tmp/.cpan/build/ DONE Found no old builds, restored the state of none unlink /usr/bin/ack unlink /usr/lib/perl5/site_perl/5.10/App/Ack.pm unlink /usr/lib/perl5/site_perl/5.10/i386-linux-thread-multi/auto/ack/.packlist # おまけ:第2引数が真なら何もしない % cpan-uninstall ack -n unlink /usr/bin/ack unlink /usr/lib/perl5/site_perl/5.10/App/Ack.pm unlink /usr/lib/perl5/site_perl/5.10/i386-linux-thread-multi/auto/ack/.packlist
でもぶっちゃけrpm化した方が良いですよ。
トラックバック - http://d.hatena.ne.jp/holidays-l/20080824/p1
リンク元
- 438 http://www.google.co.jp/search?q=cpan+アンインストール&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 221 http://www.google.co.jp/search?hl=ja&q=cpan+アンインストール&lr=
- 84 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=perl+Catalyst+Email+ForceUTF8&btnG=検索&lr=lang_ja
- 63 http://www.google.co.jp/search?hl=ja&source=hp&q=cpan+アンインストール&lr=&aq=0r&oq=CPAN+あんいん
- 60 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGLL_ja&q=インターネット 印刷できない
- 45 http://www.google.co.jp/search?q=CPAN+モジュール アンインストール&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 37 http://www.google.co.jp/search?q=cpan+uninstall&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 31 http://www.google.co.jp/search?q=cpan+uninstall&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 30 http://www.google.co.jp/search?q=perl+cpan+アンインストール&btnG=検索&hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&hs=dL5&sa=2
- 28 http://www.google.co.jp/search?hl=ja&q=cpan+モジュール+アンインストール&btnG=Google+検索&lr=&aq=4&oq=Cpan+モジュー??%A
