putsの改行コード
putsの改行コードは、環境に応じてLFとかCRLFとか使い分けているのでしょうか。気になったので調べてみました。
$ ruby -e 'puts "hello"' | od -c 0000000 h e l l o \n 0000006
んー、NetBSDで実行するとLFみたいです。ソースコードを追ってみると、
io.c 3590 VALUE 3591 rb_io_puts(argc, argv, out) 3592 int argc; 3593 VALUE *argv; 3594 VALUE out; 3595 { ... 3616 rb_io_write(out, line); 3617 if (RSTRING(line)->len == 0 || 3618 RSTRING(line)->ptr[RSTRING(line)->len-1] != '\n') { 3619 rb_io_write(out, rb_default_rs); 3620 } ... 5311 void 5312 Init_IO() 5313 { ... 5373 rb_rs = rb_default_rs = rb_str_new2("\n"); 5374 rb_output_rs = Qnil; 5375 rb_global_variable(&rb_default_rs); 5376 OBJ_FREEZE(rb_default_rs); /* avoid modifying RS_default */
変数rb_default_rsに改行コードが入っています。IO関連の初期化時にLFに初期化されてそれっきりみたいです。ということは特に環境に応じて使い分けていないのね。