Humanity

Edit the world by your favorite way

Term::ReadLineがうまく利いてくれないときの対処法

Term::ReadLineは、$ENV{PERL_RL}の値を見て、それぞれロードしてくれるモジュールを変えてくれる。
例えば、Perldocにも書かれてあるけど、

export PERL_RL=" o=0"

とすれば、最適なモジュールを自動的にロードしてくれるみたい。


ただこの値がセットされていない場合のCentOSでの挙動がなんか変だ。
入力の時のカーソルがプロンプト文字列に被さって一番左に来たりする。
何が悪さをしているのかを調べてみると、Term::ReadLine::Gnu, Term::ReadLine::Perlの順にロードしようと試みるらしいんだけど、
自分の環境はTerm::ReadLine::Gnuがインストールされてるのでそれが使われてるはず。
なのでこのモジュールがうまく端末の情報(termcapとかいうんだっけ?)を認識できてないっぽい。
とりあえず上の環境変数をセットしたら直ったんだけど、
できればスクリプト中で動的に操作したいなーと思ったので下のようにしてみた。
(Net::Twitter::CLIの116行目から抜粋)

        local $ENV{PERL_RL} = ' o=0';
        require Term::ReadLine;

こうすれば環境変数に影響を与えることなく(というか別に%ENVに値をセットしたら環境変数に影響が出るわけじゃないけど)、
現在の環境に最適なモジュールがロードされる。




なんか今日は頭が回らない。あと左腕がなぜか筋肉痛。
早く寝ればいいのに・・・最近不眠症(というか神経質になってるのと寝る気があまりないだけ)が再発してきた。