VIP de Programming

   

気になった発言とか簡易まとめ
ある程度まとまったらwikiにうpしよう!
レス集

[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 base64require '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は見事に弾いてくれるのでおそらく問題ない。
次回は、コメントやスレを見て決めたーり

Permalink
Comments (View)
blog comments powered by Disqus