John Williams wrote:

On Thu, 5 Dec 2002, Joseph F. Ryan wrote:

John Williams wrote:

On Thu, 5 Dec 2002, Joseph F. Ryan wrote:

With all of the new crazy quoting shenanagains, I'm not sure that the
"balenced brackets are fine" rule will still be possible; and thus end
delimeters will always need to be escaped. For instance, imagine
what a nightmare this would be to parse:

$var = qq[blah [\q[blah [\qq[%hash{qq[[hi]]}]]]] blah];

Sure, anyone who writes something like this deserves to be shot;
however, if the "balanced brackets are ok" rule still stands, the
above code would be legal. (And I really, really, really don't
want the above code to be legal ;)

Well, just don't do it then. With or without balanced brackets, the
obfuscating programmer can do the above; he just needs more or less
backslashes.

Saying "Just don't do it" doesn't stop someone from doing it. True,
the example was an obfuscated one, but it was to prove a point. This is
just as obfuscated in my opinion:

$var = qq[[[%hash{qq[one]}{qq[next]}],[],[%hash{qq[hi]}{qq[there]}]]];

Adding backslashes to the first example helps clear up some of the
confusion:

$var = qq[blah [\q[blah [\qq[%hash{qq[[hi\]]}]\]]\]blah];
$var = qq[blah \[\q[blah \[\qq[%hash{qq[\[hi\]]}]\]]\]blah];

Maybe that's because you wrote it in the first place; as a reader I think
it looks just as bad, if not worse.

True, it looks *very* bad, but least its easier to tell what
quotes and what doesn't.

Really, I think that if you really feel the need to use a delimiter
that you know that will be in the text that you are quoting, you should
have to go through the trouble of escaping it. Its only fair :)

No, it's not fair, because I ALWAYS have to worry about escaping
something. What I really want is a quote operator which really quotes
everything. I don't want to have to worry about what accidental "\q"
substrings are going to do in my strings. q{} was the best way to do that
in perl5, because even braces within the string were ok if they behaved
themselves.

What's wrong with single quoted here-docs?

'\qq[]' is the real source of evil here.

Actually the apocalypse says:


RFC 226: Selective Interpolation in Single Quotish Context.

This proposal has much going for it, but there are also difficulties,
and I've come close to rejecting it outright simply because the
single-quoting policy of Perl 5 has been successful.

Maybe if we pushed Larry a bit, he could reject it after all?

Why? I love \qq[] and \q[]. I'd much rather have embedded strings
than be able to balance used delimiters inside quotes. I don't like the
"balance delimeters" rule at all, and don't see it as anything more
than an ugly hack. I'd much rather have it go than embedded strings.

I am diametrically opposed to your opinions here.  I hate '\qq[]' as an
ugly hack, which ruins the non-embedding, non-quoting nature of
non-interpolated strings.  If you want to embed, just use interpolated
strings.

Don't forget that the backslash is already special in
non-interpolating strings; I don't think that adding a single
special case will make things too confusing.

What if \q[] was allowed in interpolated strings, but not in
non-interpolated strings.  Then I'm happy with that non-interpolated
strings really don't interpolate, and you might be happy because it would
only make sense to do one level of nesting. ie, you cannot embed \qq[]
inside \q[].  Or you could do $(''), which is the same number of
characters as \qq[], and doesn't require introducing
yet-another-new-rule-to-an-already-too-complicated-escaping-system.

I think \qq[] is the much more useful of the two, so
that really doesn't help much.


Joseph F. Ryan
[EMAIL PROTECTED]

Reply via email to