argius note

プログラミング関連

1行ずつ処理する-知らなかったこと

テキストデータを1行ずつ処理する場合。

# Perl
while (<>) {
    print if /end/i;
}

これを使うとき、こうやって実行していた。

$ cat file.txt | perl grep.pl

しかし、これで動くことを今日知った。

$ perl grep.pl file.txt

それと言うのも、Rubyでは

# ruby !キレイ!
while line = gets
  puts line if /end/i.match(line)
end

getsは、ARGF.getsの省略形で、第1引数がファイルならそれを1行ずつ処理するというのを見て、いままでPerlではできないと思い込んでいたが、ふと思い立って上のPerlの引数に指定できることを知った。
ちなみに、line = gets(line = gets) != nilと書いていた。過去ログのにそのまま残ってる。