Term::ReadLineが結構楽しい
CPAN.pmを何気なく見ていたらTerm::ReadLineなるものを発見。
恥ずかしながら初見でしたが何やら楽しげなパッケージ名なので遊んでみました。
名付けて対話型武藤。
まず結果からご覧いただきましょう
$ ./muto.pl 武藤 : 武藤 : name 武藤 敬司 武藤 : kana ムトウ ケイジ 武藤 : height 188cm 武藤 : weight 115kg 武藤 : finishing_move シャイニング・ウィザード 武藤 : movie 光る女 武藤 : music HOLD OUT 武藤 : 武藤 : 武藤 : all .-------------------------------------------------------. | column | value | +----------------+--------------------------------------+ | born_in | 山梨県富士吉田市 | | name | 武藤 敬司 | | finishing_move | シャイニング・ウィザード | | height | 188cm | | kana | ムトウ ケイジ | | similar | 神無月 | | movie | 光る女 | | brth | 1962-12-23 | | weight | 115kg | | music | HOLD OUT | | blood_type | B型 | '----------------+--------------------------------------' 武藤 : 武藤 : exit プロレスLove Bye!! $
ちょっと躍動感が無くてあれですがシェルのように対話型でバシバシ打った結果です。
で、これが僅かこんな感じ
#!/usr/local/bin/perl use strict; use Term::ReadLine; use Text::ASCIITable; my $muto = { name => "武藤 敬司", kana => "ムトウ ケイジ", brth => "1962-12-23", born_in => "山梨県富士吉田市", height => "188cm", weight => "115kg", blood_type => "B型", similar => "神無月", movie => "光る女", music => "HOLD OUT", finishing_move => "シャイニング・ウィザード", }; my $term = Term::ReadLine->new('muto'); my $prompt = "武藤 : "; my $OUT = $term->OUT || *STDOUT; while (defined(my $in = $term->readline($prompt))) { if (exists $muto->{$in}) { print $OUT $muto->{$in}; } elsif ($in eq 'all') { my $t = Text::ASCIITable->new(); $t->setCols(qw(column value)); for my $key (keys %$muto) { $t->addRow($key, $muto->{$key}); } print $t; } elsif ($in eq 'exit') { print "プロレスLove Bye!!\n"; last; } $term->addhistory($_) if /\S/; }
ほぼSYNOPSIS通りでさっくり出来た!簡単!素晴らしい!
何よりやってる感満載!!
まぁご承知の通り武藤はあんまり関係なくてですね、
日々の業務でみなさんよくやる作業があると思うんですが、
(SQLゴリゴリ書いてそれを読んだりファイルパースしたりどうたらとか)
それらを詰め込んでオレオレ対話型にしてみてはちょっとした非日常が味わえるんではなかろうかというお話でした。
ちなみに武藤の入場曲が『HOLD OUT』なのは譲れません。