いかん、しばらく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しちゃったりするコードがあって も平気。うーん、どっかにまとめるか。