perlでirbしたいと思ったら出来るみたい

perlでirbしたいと思ったら出来るみたい

前にRubyの勉強会に参加した時に irb を教えてもらって、便利だったのでPerlでも同じようなことが出来ないかググったら出来るみたい。

Perl5 で REPL(Read-Eval-Print-Loop)をつかいたければ、perl -de 1 をつかえばいい。

  DB<1> $x = 1;
  DB<2> print $x;
1

ただしレキシカルスコープが保存されないとの事。

my $x = 1;
print $x;

が正しく動作しない。

で、解決法として Eval::WithLexicals が紹介されている。付属の tinyrepl コマンドを使えばレキシカルスコープが使える。その代わりにグローバル変数を使うと怒られる。

$ tinyrepl
re.pl$ $x = 1;
"Error!"
"Global symbol \"\$x\" requires explicit package name at (eval) line 1, <FIN> line 1.\nBEGIN not safe after errors--compilation aborted at (eval) line 3, <FIN> line 1.\n"

コマンドラインでちょっとコードを試したい時とかに使うくらいなので、レキシカルスコープとか要らないかな。で、面倒なので ipl コマンドで perl -de 1 が使えるようにしておく。Pathが通っている場所に

$ vi ipl

#!/bin/sh
perl -de 1

$ chmod +x ipl

ってコマンド作っておく。

すぐに追記: postしたらすぐに教えて頂いた。最近ではreplyっていうのがおすすめらしい。

perlのREPL近状 - やわらかコード

なるほどググると情報ありますね。あとで試してみよう。