フラットな json ドキュメントを生成するコマンド ライン ツールがあります。これを想像してください:
$ ruby gen-json.rb --foo bar --baz qux
{
"foo": "bar"
"baz": "qux"
}
私が欲しいのは、これが機能することです:
$ ruby gen-json.rb --foo $'\0' --baz qux
{
"foo": null,
"baz": "qux"
}
null の代わりに空の文字列を取得します。問題をさらに単純化するには、次のことを考慮してください。
$ cat nil-args.rb
puts "argv[0] is nil" if ARGV[0].nil?
puts "argv[0] is an empty string" if ARGV[0] == ""
puts "argv[1] is nil" if ARGV[1].nil?
このように実行して、この出力を取得したい:
$ ruby nil-args.rb $'\0' foo
argv[0] is nil
しかし、代わりに私は得る
argv[0] is an empty string
これは (ほぼ間違いなく) Ruby インタープリターのバグだと思います。argv[0] を null で終了する C 文字列として扱っています。