[Ruby]実例で学ぶワンライナーRuby入門$3
あーデータ処理簡単にしたいなーってな時に
Rubyの便利な使い方としてワンライナーがあるが、
よくまとめられているサイトが無いのでまとめてみる。三回め
requireする
さてさておそらく今回までが基本的なこと。
Rubyもといスクリプト言語の魅力は、その記述の軽快さと豊富なライブラリだろう。
ただライブラリはものによってrequire(rubyの場合)しなきゃならん。
こいつがワンライナーで書くときにくせになるというわけだ。
たとえばBase64でひたすらエンコするのを作るとしよう。
$ ruby -e 'require "base64";while gets;puts Base64.encode64($_.chomp);end'
とまあ長くなってしまう。
ここで起動時にrequireしてくれる便利な-rオプションを使おう。
$ ruby -r base64 -ple '$_=Base64.encode64($_)'
するとこんなに短くできる!!-r base64で require 'base64'して -ple以下を実行。-lとは-pや-nでのgetsを毎回chompしてくれる有難いオプションなのだww
※補足
つっこまれないように、このコードは以下のように書くこともできる。なぜこう書けるかは、
それぞれ調べたり考えたりしてもらいたい。
$ ruby -e 'require "base64"' -nle 'puts Base64.encode64($_)'
$ ruby -ple '$_=[$_].pack("m*")'
連続requireしたーり
では本日の最後に、入力されたURIをBase64エンコードするコードを作ってみよう。
$ ruby -r base64 -r open-uri -ne 'puts Base64.encode64(open($_).read)'
-r base64、-r open-uriでそれぞれ必要なライブラリを読み込んで -neで実行というわけだ。
おわったーり
なんか今日は短かったな。補足の補足をすると
$ ruby -e 'require "base64"' -ne 'puts Base64.encode64($_)'
はgetsの度にrequireされるけどrubyは多重requireは見事に弾いてくれるのでおそらく問題ない。
次回は、コメントやスレを見て決めたーり