わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

URI#split, URI#parseでエラー?

毎週木曜の演習の準備をしていて,自作のRubyスクリプトが期待通りに動かず,あせりました.
エラーメッセージはこんな感じ.2番目の「(略)」は,なぜか,URI文字列の一部でした.

(略)/lib/ruby/1.8/uri/common.rb:436:in `split': bad URI(is no (URI::InvalidURIError)(略)

実行するコマンドは,あるテキストファイルに記述していまして,シェルからは「$(cat テキストファイル)」で実行しています.そういうテキストファイルが5つありまして,2つが成功,3つで,上記のエラーになりました.
Rubyリファレンスマニュアルを見て,URI#splitのバグか,まさかな,と思いながら,自作コードのsplitをparseに変更してみても,依然としてエラーが出ます.
お外を少し調べると,原因がわかりました.

ポイントは

I believe that URI.split has an undocumented precondition on the uri parameter, that it should not contain any whitespace around it.

で,URI文字列の前後に空白文字があるとダメ,とのこと.
実際,エラーの出る直前に,文字列の内容を見てみると,改行がついていました.
では取り除きましょう…

    @uri_string = param
    @uri = URI.parse(@uri_string)

のところを

    @uri_string = param.strip
    @uri = URI.parse(@uri_string)

に書き換えて,問題解決しました.