Re: String Literals, take 3

[email protected] ("Joseph F. Ryan") Fri, 06 Dec 2002 00:40:41 -0500
Newsgroups perl.perl6.documentation
Message-ID <[email protected]>
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]