Term::ReadLine::Gnu...というよりperlshのインストールメモ

サッカーアジア杯、日本優勝しましたね。サッカー観戦日に記事を書くy_echoです。どうもこんばんは。

最近~/homebrew、~/perl5/perlbrewな開発環境に再構築したんですが、perlshインストール時に少し手作業が必要だったのでメモっときます。

perlshはPerlインタラクティブシェル

perl interactive shell」でググるといくつか他のものも発見できますが、ぼくはWEB-DB PRESS*1の記事(by id:naoyaさん)でその存在を知ったperlshを使ってます。

[y_echo@MacBook ~]% perlsh
main[1]$ use Data::Dumper;
main[2]$ $dumped = { foo => 'bar' };
HASH(0x10093edc8)
main[3]$ print Dumper($dumped);
$VAR1 = {
          'foo' => 'bar'
        };
1
main[4]$ 

こんな感じです。たまーに使う程度ですが、あったらあったで便利なときもあります。

このperlsh、Term::ReadLine::Gnuのサンプルとしてディストリビューションに含まれているので、まずはTerm::ReadLine::Gnuをインストールします。

Term::ReadLine::Gnuのインストール

とりあえずcpanmすると

[y_echo@MacBook ~]% cpanm perlsh
! Finding perlsh on cpanmetadb failed.
--> Working on perlsh
Fetching http://search.cpan.org/CPAN/authors/id/H/HA/HAYASHI/Term-ReadLine-Gnu-1.20.tar.gz ... OK
Configuring Term-ReadLine-Gnu-1.20 ... N/A
! Configure failed for Term-ReadLine-Gnu-1.20. See /Users/y_echo/.cpanm/build.log for details.
[y_echo@MacBook ~]% 

通りません。「perlshでも検索してくれるんですね。かしこい!」というのは置いておいてbuild.logを見ると

...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The libreadline you are using is the libedit library.  Use the GNU Readline Library.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...

ということで、GNU Readlineが入っていませんでした。GNU ReadlineのHombrew Formulaはデフォルトで含まれているので

[y_echo@MacBook ~]% brew install readline
[y_echo@MacBook ~]% brew link readline

とします。なお、インストール時に「BSDのlibreadlineが云々...もし必要なら云々」と言われるため、brew linkして~/homebrew/libにライブラリのリンクを貼っておきます*2

ここで再びcpanmするのですが、GNU Readlineがいわゆるデフォルトパスにないので、途中で自前configureします。

[y_echo@MacBook ~]% cpanm --prompt Term::ReadLine::Gnu
--> Working on Term::ReadLine::Gnu
Fetching http://search.cpan.org/CPAN/authors/id/H/HA/HAYASHI/Term-ReadLine-Gnu-1.20.tar.gz ... OK
Configuring Term-ReadLine-Gnu-1.20 ... Configuring Term-ReadLine-Gnu failed.
You can s)kip, r)etry or l)ook ? [s] l
Entering /Users/y_echo/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20 with /bin/zsh
[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% 

INSTALLを読むとprefixだけいじればよさそうです。

[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% perl Makefile.PL --prefix=~/homebrew/
...
Writing Makefile for Term::ReadLine::Gnu
[y_echo@MacBook ~/.cpanm/work/1296331256.12924/Term-ReadLine-Gnu-1.20]% exit
Configuring Term-ReadLine-Gnu failed.
You can s)kip, r)etry or l)ook ? [s] s
...
Successfully reinstalled Term-ReadLine-Gnu-1.20

perlshをディストリビューションからサルベージ

perlsh自体は自分でcpとかします。ちなみに、ぼくは以下の場所に置くことにしました。

[y_echo@MacBook ~]% cp ~/.cpanm/latest-build/Term-ReadLine-Gnu-1.20/eg/perlsh ~/perl5/perlbrew/perls/5.12.2/bin/perlsh

最後に、perlshのshebangを/usr/local/bin/perlから適当なものへ変更します。

#!/usr/bin/env perl

perlbrewを使ってる場合のshebangについては、@lestrratさんのエントリhttp://mt.endeworks.jp/d-6/2010/08/perlbrew.htmlなどを読んでみてください。

*1:だいぶ前のやつです

*2:後々不要ならbrew unlinkしてください