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
- Prev Entry:sub { my $arg = shift; } のshift
- Next Entry:git-svnでリモートブランチをmergeするときは–no-ffをつけるべし