今までずっと
$ perl -MLWP::Simple -MJSON -e 'print decode_json(get "http://***.com/***.json")'
みたいなカンジで書いてたけど、わざわざモジュールでhttpのgetをしなくても他のコマンドを使う方法があることを知った。
たとえば、Macなら"curl"というコマンドが標準でついているらしく、
$ curl "http://***.com/***.json" 2> /dev/null | perl -MJSON -ne 'print decode_json($_)'
もしくはパイプを使わずに
$ perl -MJSON -e 'print decode_json(`curl "http://***.com/***.json"`)' 2> /dev/null $ perl -MJSON -e 'print decode_json(`curl $ARGV[0]`)' "http://***.com/***json" 2> /dev/null
のように書くことができる。
でもコイツはダウンロードの進捗がエラー出力されるので"/dev/null"に捨てなきゃいけない…抑制できるオプションあるのかな? ><
あとはMacには標準ではないけどLinuxでは標準?"wget"というコマンド。これも同じような機能があるので
$ wget -qO- "http://***.com/***.json" | perl -MJSON -ne 'print decode_json $_'
とか
$ perl -MJSON -e 'print decode_json(`wget -qO- "http://***.com/***.json"`)' $ perl -MJSON -e 'print decode_json(`wget -qO- $ARGV[0]`)' "http://***.com/***.json"
という具合に書ける。こちらはオプションでエラー出力を抑制できるのでイイカンジ! LWP::Simpleを使うよりも短く書けるようになるかもしれない。
追記
ftpコマンドでも同じようなことできた。知らなかった…
$ ftp -Vo- "http://***.com/***.json" | perl -MJSON -ne 'print decode_json($_)'
コマンドの文字数的にこれが最強かもw