I know.
But that's still not a guarantee, I doubt this was intended.
| [reply] |
Why should that be unintended?
See perlop on Quote-like operators, where here-documents are equivalent to nomal double-quoted strings, and that certainly holds true for the scope where they are evaluated in. This scope is determined by the place where the <<"FOO" occurs, not where the end of string marker sits, since here-docs are a line-oriented quoting mechanism.
I'm pretty sure that this behaviour is intentional and has been a long time in Perl and will stay.
| [reply] [d/l] |
I'm pretty sure that this behaviour is intentional and has been a long time in Perl and will stay.
I agree, and I think the fact that the here-doc starts on the next line and not immediately following the opening expression follows from these examples in perlop, present since Perl 5.8.0 (the final example was eventually dropped in favor of indented here docs):
print <<"foo", <<"bar"; # you can stack them
I said foo.
foo
I said bar.
bar
myfunc(<< "THIS", 23, <<'THAT');
Here's a line
or two.
THIS
and here's another.
THAT
Just don't forget that you have to put a semicolon on the end to finish the statement, as Perl doesn't know you're not going to try to do this:
print <<ABC
179231
ABC
+ 20;
If you want your here-docs to be indented with the rest of the code, you'll need to remove leading whitespace from each line manually:
($quote = <<'FINIS') =~ s/^\s+//gm;
The Road goes ever on and on,
down from the door where it began.
FINIS
| [reply] [d/l] [select] |