Webtech Walker

perlのワンライナーで使えそうなのをいくつか

最近ちょっとしたことはperlのワンライナーでやるので便利そうなのを抜き出してみる。必要に応じてzshの関数とかaliasにしたりとか。ちなみにperlのワンライナーといえばsugyanなのできっともっと便利なのをいくつも紹介してくれるはずです。

画像をbase64にエンコード

$ perl -MMIME::Base64 -0777 -wne 'print encode_base64($_)' < file

HTMLにdataスキームで画像埋め込むときとか、出力を改行したくないときはencode_base64の第二引数に空文字を渡す。

$ perl -MMIME::Base64 -0777 -wne 'print encode_base64($_,"")."\n"' < file

画像のリサイズ

$ perl -MImager -se 'Imager->new->read(file=>$from)->scale(xpixels=>$width)->write(file=>$to||$from)' -- -from=/path/to/from_file -to=/path/to/to_file -width=int

toを指定しないとfromを上書きする。引数が多いときはsオプション使ったほうがわかりやすいかな。

URLをデコード

$ perl -MURI::Escape -wle 'print uri_unescape $ARGV[0]' http://ja.wikipedia.org/wiki/%E3%81%93%E3%81%88%E9%83%A8
http://ja.wikipedia.org/wiki/こえ部

APIからGETでとってきたJSONをデコードして出力

$ perl -MLWP::Simple -MJSON -MData::Dumper -we 'print Dumper decode_json get $ARGV[0]' http://twitter.com/statuses/public_timeline.json

Data::Dumperでハッシュを出力してるけど、YAMLにしても見やすいよってsugyanに教えてもらった。

$ perl -MLWP::Simple -MJSON -MYAML -we 'print YAML::Dump decode_json get $ARGV[0]' http://twitter.com/statuses/public_timeline.json

ファイルを連番付けてリネーム

$ perl -MPath::Class -wle '$i=1;map{m!./(.+).(.+)!;rename($_,sprintf("%s_%02d.%s",$ARGV[0],$i++,$2))}grep{-f}dir(".")->children' prefix

カレントディレクトリのファイルをprefix_01.xxxみたいな感じに連番つけてリネーム。何書いてあるか自分でもよくわからん。

モジュールのバージョンとインストールされてるパスを表示

$ perl -le 'eval "require $ARGV[0]";print ${"${ARGV[0]}::VERSION"};print qx/perldoc -ml $ARGV[0]/' Moose
0.88
/opt/local/lib/perl5/site_perl/5.8.9/Moose.pm

よくある

$ perl -MModule -e 'print $Module::VERSION'

だと、使い回すとき二回モジュール名をタイプしないといけないので一回で済むように。ついでにパスも表示。

メール送信

$ perl -MMIME::Lite -we 'MIME::Lite->new(To=>$ARGV[0],Subject=>"test",Data=>"test")->send' to_mail_address

テストでメール送信するときとか。ファイル添付とかも以下のようなかんじで。

$ perl -MMIME::Lite -we '$m=MIME::Lite->new(To=>$ARGV[0],Subject=>"test",Type=>"multipart/mixed");$m->attach(Type=>"application/octet-stream",Encoding=>"base64",Path=>$ARGV[1]);$m->send;' to_mail_address path_to_file
このエントリーをはてなブックマークに追加