発端はこの発言。 YAMLの文法、謎が多い URL 2012-06-27 13:22:42 via YoruFukurou いわく、 # ruby YAML.load('[0, 1]') == [0, 1] YAML.load('[0,1]') == [1] になるというもの。カンマの後ろにスペースがあるかないかでパース結果が異なる。馬鹿な。 調べた結果、Ruby 1.9.2 までデフォルトの YAML パーサであった Syck に問題があることが分かった。 Syck は、 いわゆる配列(YAML の用語ではフローシーケンスという)の要素を区切るカンマの後にスペースがないとき、カンマが存在しないものとしてパースする。つまり [0,1] という YAML は [01] に等しく、8進数の“1”を要素とするシーケンスと解釈される。 これ、 Syck がタコなだけかと思いきやそうでもないらしい。