On Tue, Aug 22, 2006 at 08:12:09PM +0100, Daniel Hulme wrote:
: > : my $a = q:t /END/
: > : test
: > : END;
: 
: > :    print qq:to/END/;
: > :        Give $amount to the man behind curtain number $curtain.
: > :        END
: 
: > : Which is correct?
: 
: > Both of them are.  See the table further down that says:
: 
: What about the semicolon? After the terminator, or after the opening
: line?

Ah, missed that, thanks.  On the opening line is correct, just as in
Perl 5.  The heredoc is just a term with some indirection, and the
indirection is completely line oriented.  The terminator must still
be on a line by itself, with nothing but whitespace.  We could just
as easily have a POD indirection that said

    print qq:from/FOO/;

and it would go looking for the nearest =begin FOO block to insert.
So syntactically, it's only sort of happenstance that with heredocs
the document happens to be "here".  The inline-ness of it is secondary
to the line-orientedness of it, in my mind.  And it is often not,
in fact, truly inline, as demonstrated by

    print qq:to/FOO/, qq:to/BAR/;
        ...
        FOO
        ...
        BAR

It's really just a way to abstract a large string containing newlines
into a single token that doesn't.

Larry

Reply via email to