いかん、しばらくRuby触ってなかったら一行も書けずに身動きできなくなる 程忘れた。オブジェクト指向にかかわるあたりは覚えてるが、標準入力でループ を回すとかそういうイディオム的な部分がさっぱりだ。なので備忘録。
とりあえず、何かPerlでフィルタを書こうってときはこうする。
while (<>) { なんちゃら〜 かんちゃら〜 }
これをどう書くかが思い出せなかったが、Rubyだとこうだ。
while gets なんちゃら〜 かんちゃら〜 end
暗黙の受け取り変数 $_ に入るのはPerlと一緒だがそれを使うと 動作が把握しにくくなるのでこんな風にしてみた。
ln=1 while line=gets line.chop! case line when /REGEXP/ うおーりゃ print "#{ln}: line\n" end ln+=1 end
てなぐあい。ダブルクォート中の式展開は #{…} で括る。変数だけでなく 任意の式OK。インクリメント演算子(++)は無いらしい、+=で1足すのが最短?
ファイルを開こう。これもオブジェクト指向的書き方ね。ファイル処理とか はドット区切りの書き方は楽かも。
obje = open("ファイル", "r") while obje.gets print end obje.close
でも閉じ忘れがないようにてことを考えるとopenにブロックを足してこうか。
open("ファイル", "r") {|obje| while obje.gets うがあ print end }
これだと、うがあ の部分でメソッドからreturnしちゃったりするコードがあって も平気。うーん、どっかにまとめるか。