URI::Escape には escape_char という関数がある。
これはなんと同じバージョンでも実装が異なる。
というのも、これは URI::Escape 単体でリリースされているのではなく、 URI のパッケージに付属するもので、 URI:: 以下のモジュールのバージョン管理が URI と揃っていないから。
例えば URI@1.60 にも URI@1.76 にも URI::Escape@3.31 が付属している上に中身が違う。OMG
なので cpanfile で
requires 'URI::Escape' => '==3.31';
と書いても、期待するものが得られるとは限らない。現在の URI の最新版は 1.76 なので、最新の実装がほしいなら
requires 'URI' => '==1.76';
と書かなければならない。
ということを今日は author の方から教わりました。
https://github.com/libwww-perl/URI/issues/73