対話環境perlshを使ってみる

Perlにもirbみたいな対話環境が欲しいなーと思ったのでググったら、perlshなるツールが良いようなので導入してみました。中々悪くなかったので、perlbrew + cpanm での導入メモを書いておきます。

perlshの導入

$cpanm perlsh


と実行すると、perlshという名前のモジュールは無いと教えてくれるんですが、そのときTerm-ReadLine-Gnuというツール群が自動的に入ります。その中にperlshがあるので、適当にpathの通った場所に移動すれば使えるようになります。

cp ~/.cpanm/latest-build/Term-ReadLine-Gnu-1.20/eg/perlsh ~/perl5/perlbrew/perls/perl-5.14.0/bin/perlsh


場所は各自の環境に合わせて適宜アレンジしてください。後は起動するだけで(ある程度は)快適な対話環境が使えるようになります。

Perlbrew使ってる環境だと、shebangは#!/usr/bin/env perlにしておくのが無難かもしれません。

perlshの設定

~/.perlshrcに色々書くことでperlshを改造できます。
詳しくはこちら。


http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20080328


$PerlSh::STRICTに1を入れることでuse strict;っぽい動作になるみたいなんですが、手元のperlshだとmyを使った変数宣言が上手くいきません。evalの中でレキシカルスコープが終わってしまうので、次の入力行のスコープでは見えなくなってしまうのが原因なのかなーと思っているんですが、この辺り理解が浅いので確証は持てません…。Devel::LexAliasなる悪魔的モジュールはスコープの外に変数を輸出できるようなのですが、evalの中でlexaliasを呼ぶとSegmentation faultでperlが落ちてしまいます。XSが何か悪さをしているんでしょうか…。


Perlはどれだけ勉強しても解らないことばかりで怖いですね。