文字列リテラルの連結

1.8.6リファレンスに、

空白を間に挟んだ文字列リテラルは、コンパイル時に1つの文字列リテラルと見倣されます。

と書いてあり、確かに、

puts "abc" "def"     #=> abcdef

となり、今までも何回か使った。こんなケース。

str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" \
      "ccccccccccccccccccccccccccccccccc"


しかし、これは%記法の文字列リテラルだと効かないようだ。

puts %!abc! %!def!     #=> undefined method `def!' for main:Object (NoMethodError)

囲む文字 ! を色々変えるとエラー内容も変わる。これはバグ?

2010-03-25追記

puts %!abc! "def"    #=> abcdef
puts %!abc! %"def"   #=> abc
puts %!abc! %"def"; puts "xyz" #=> abc 改行 xyz

1.8.6だけじゃなく、ruby 1.9.1p243 (2009-07-16 revision 24175) [i686-linux] でも同じ。