トップ «前の日記(2010-06-30) 最新 次の日記(2010-07-11)» 編集

2010-07-01 [長年日記]

_ Rubyのautosplitの結果は$FというグローバルなArrayに入る

いや知らなかった。

$ ruby --help
Usage: ruby [switches] [--] [programfile] [arguments]
  -0[octal]       specify record separator (\0, if no argument)
  -a              autosplit mode with -n or -p (splits $_ into $F)
  -c              check syntax only
  -Cdirectory     cd to directory, before executing your script
  -d              set debugging flags (set $DEBUG to true)
  -e 'command'    one line of script. Several -e's allowed. Omit [programfile]
  -Fpattern       split() pattern for autosplit (-a)

(snip

「awk でもいいんだけど Ruby が標準で持ってるメソッドを使えばもっと楽にできる処理」がたぶんあったんだと思うけど、なんか急に Ruby の autosplit を使って処理してみようと思い立った。*1

で、使ってみたら split された結果がどこに入っているのか分からなくて困った。awk の代わりに使おうと思っているのでてっきり split した結果は $1, $2, $3, ... に入る、

help の $F という表記はそういう意味なんだと勝手に思い込んでしまっていた。

つまり、F は 1, 2, 3, ... に置き換えられるものなんだと。でも違った。

本当に $F という変数ができていて、しかも zero origin の Array だった。

まぁ確かに split は split であって back reference じゃないし、String#split の挙動と合っているので自然なんだけどね。awk脳の恐怖っ。

※ その後、結局 autosplit はやめて普通に自前で回して自前で split して自前で処理した。

Tags: Ruby

*1 実際にこの日記を書いているのは2週間近く経ってからなので、理由はもう覚えていない