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に値をセットしたら環境変数に影響が出るわけじゃないけど)、
現在の環境に最適なモジュールがロードされる。
なんか今日は頭が回らない。あと左腕がなぜか筋肉痛。
早く寝ればいいのに・・・最近不眠症(というか神経質になってるのと寝る気があまりないだけ)が再発してきた。