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』なのは譲れません。