Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^3: Is a here-doc a good way to retrieve data file contents for testing? (updated)

by tybalt89 (Monsignor)
on Jan 17, 2021 at 02:56 UTC ( [id://11127018]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Is a here-doc a good way to retrieve data file contents for testing? (updated)
in thread Is a here-doc a good way to retrieve data file contents for testing?

Because it's a lexer thing. To the parser it's just a string *inside* the body of the sub.

  • Comment on Re^3: Is a here-doc a good way to retrieve data file contents for testing? (updated)

Replies are listed 'Best First'.
Re^4: Is a here-doc a good way to retrieve data file contents for testing? (updated)
by LanX (Saint) on Jan 17, 2021 at 03:24 UTC
    I know.

    But that's still not a guarantee, I doubt this was intended.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      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.

        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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11127018]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2024-04-19 21:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found