perlsh(perl -de 1)でインタラクティブシェルを試してみる

はてなブックマーク - タグ「perl」を含む注目エントリーで発見した、perl as login shell (was Re: awk vs perl)perlデバッガのインタラクティブモード(perl -de 1)をシェルとして実用できるレベルにするための設定情報がまとめられています。おもしろそうだったので実際に試してみました。
まず(osxで試したので)Terminal起動。DB<1>が入力待ちしてます。

Last login: Sat Sep 10 22:11:25 on ttyp3
Welcome to Darwin!
Erase set to backspace.                                                                                         
Interrupt is control-C (^C).

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(-e:1):   1
  DB<1> 

lsしてみるが、何も表示されない。

  DB<1> ls

.perldbの中身を確認。コマンド前に"@ "を付ければいいらしい。

  DB<2> @ ls
CmapToolsLogs   Library         Pictures        __.ssh          code            memo
Desktop         Movies          Public          ___.ssh         freemind        src
Documents       Music           Sites           bin             identity        tmp

trace onしてperl実行内容を表示してみる。おぉ。

  DB<3> t
Trace = on
  DB<3> @ ls
main::((eval 10)[/System/Library/Perl/5.8.6/perl5db.pl:628]:2):
2:      system(" ls");
CmapToolsLogs   Library         Pictures        __.ssh          code            memo
Desktop         Movies          Public          ___.ssh         freemind        src
Documents       Music           Sites           bin             identity        tmp

パスを変数に入れてlsに渡してみる。ちゃんと動いてますね。

  DB<4> $a = "/usr"
main::((eval 11)[/System/Library/Perl/5.8.6/perl5db.pl:628]:2):
2:      $a = "/usr";

  DB<5> @ ls $a
main::((eval 13)[/System/Library/Perl/5.8.6/perl5db.pl:628]:2):
2:      system(" ls $a");
X11R6           include         libexec         sbin            standalone
bin             lib             local           share

  DB<6> t
Trace = off
  DB<6> @ ls $a
X11R6           include         libexec         sbin            standalone
bin             lib             local           share

といった感じです。まだ少ししか触ってないですけど、確かに「perl hacker養成ギブス」になりますね。新人研修で「こうやってlinuxを操作します」って騙すと効果ありそう。何も知らないで教えられた人は後で真実を知ることになるのですが…それはいいことなのか悪いことなのか。