On Sat, 13 Sep 2003, Miko O'Sullivan wrote:
> jon@endpoint.com (Jon Jensen) wrote in message news:<Pine.LNX.4.58.0309111950010.7142@louche.swelter.net>...
> > INSERT INTO sometable (5, <<\.
> > a
> > very long
> > string
> > \.
> > );
>
>
> I'm delighted to hear that here docs are being discussed for postgres.
> In the world of Perl here docs make life SO MUCH easier by allowing
> for independent quoting scopes. Jon, I'm totally in agreement with you
> that here docs would be a valuable addition to postgres. I'd like to
> propose a few modifications on the syntax you suggest above.
>
> In Perl, the rule for here docs is NOT "it starts immediately after
> the definition of the terminator" (as in your example). The rule is
> "it starts on the first line after the end of the command in which the
> terminator appears". There's a very good reason for this distinction.
> That reason is that it allows the command to be succinct, usually a
> single line, and the here doc stays completely separate. So, your
> example would like this instead:
>
> INSERT INTO sometable (5, <<'(END)');
> a
> very long
> string
> (END)
>
> Notice that the entire INSERT command is on one line. Very easy to
> read.
I'm aware of that distinction, and use it to advantage in Perl. It would
make parsing harder, though.
> One other small tweak. In Perl 5 the rule is that the terminator must
> be flush to the left of the line. That means that here docs can mess
> up otherwise nicely indented code. That issue is being fixed in Perl
> 6, where the terminator can be indented with the rest of the code.
That also would make parsing harder, and Perl 6 is not yet real, so it'd
be deviating from historical shell and Perl here document syntax.
In the end it looks like consensus has settled on a new syntax with some
of the benefits of here documents without the requirement that the end
token be on its own blank line (and thus necessitating end-of-line checks)
and perhaps more importantly, not requiring that everything quoted in a
here document always end with a newline.
Jon