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を操作します」って騙すと効果ありそう。何も知らないで教えられた人は後で真実を知ることになるのですが…それはいいことなのか悪いことなのか。