Here document

There must not be a space between the "<<" and the token string. When the token string is double-quoted ("") or not quoted, the content will be interpolated like a double-quoted string:

var text = <<"EOF"
a = #{1+2}
b = #{3+4}
EOF

If single quotes are used, then the here document will not support interpolation, like a normal single-quoted string:

var x = <<'FOO'
No
#{interpolation}
here
FOO

The here document does not start immediately at the "<<END" token -- it starts on the next line. The "<<END" is actually an expression, whose value will be substituted by the contents of the here document. To further illustrate this fact, we can use the "<<END" inside a complex, nested expression:

say (<<EOF + "lamb")
Mary had
  a little
EOF

which is equivalent with:

say (<<EOF
Mary had
  a little
EOF
+ "lamb");