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");