PerlでReadLineを使う

普通にで標準入力を得ようとすると、

$ perl -e 'print while $_ = <STDIN>'
hoge                      # 入力すると
hoge                      # そのまま出力される
あいうえお                # 日本語入力も
あいうえお                # 日本語で出力される
hoge^H^H                  # Ctrl+Hで戻ろうとしても戻れない
hoge                      # "^H"は出力はされない
あいうえお^H^H^H          # 日本語の場合もおなじ
あいうえお
ho                        # Deleteキーを使えば消せる
ho
あいう                    # でも日本語だと変な消え方をする
あい                      # 実際の表示と消えてる文字数が違ったり

という具合になり、日本語入力と削除でちょっとイケてないことになる。
カーソル移動もできない。


ここでTerm::ReadLineというモジュールがある。
どうやらこれは単なるインターフェースに過ぎないようで、自分の必要なReadLineモジュールを別途インストールして使う必要があるらしい。
Term::ReadLine::Gnuというモジュールがイケてるらしいので、それを入れてみる。

$ sudo span -i Term::ReadLine::Gnu

もしかするとインストールに失敗するかも。
portとかapt-getとかで入れる方が良いのかもしれない。よくわからない。

$ sudo port install p5-term-readline-gnu
とか
$ sudo apt-get install libterm-readline-gnu-perl

とか、そんなカンジで。


そうすると、イイカンジで標準入力ができるようになる。

$ perl -MTerm::ReadLine -le 'print while $_ = Term::ReadLine->new->readline()'
hoge                      # 入力すると
hoge                      # そのまま出力される
あいうえお                # 日本語入力も
あいうえお                # 日本語で出力される
ho                        # Ctrl+Hで戻ることも
ho
あいう                    # 日本語も正しく扱える
あいう

カーソル移動して挿入なんかもできる。すごく使いやすい。