Stacking HEREDOCS
I ran across this in a co-workers code yesterday. It made my head hurt for a second. Let's say you need a a function that takes 4 lines as an argument and outputs each of those lines to stdout.
def print_stanza(line1, line2, line3, line4)
puts line1, line2, line3, line4
end
print_stanza(<<-LINEA, <<-LINEB, <<-LINEC, <<-LINED)
You can get all hung up
LINEA
in a prickle-ly perch.
LINEB
And your gang will fly on.
LINEC
You'll be left in a Lurch.
LINED
The second HEREDOC starts where this first one ends, the third HEREDOC starts where the second one ends, etc. Its all valid Ruby and starts to make sense if you look at it long enough.
Most editors I've seen haven't been able to highlight the syntax correctly though. Sorta leaves you in a Lurch.
H/T Brian Dunn
Tweet