develooper Front page | perl.perl6.language | Postings from April 2005

Re: [pugs] Quoting constructs

Thread Next
Larry Wall
April 16, 2005 09:40
Re: [pugs] Quoting constructs
Message ID:
On Sat, Apr 16, 2005 at 03:14:50AM +0300, Roie Marianer wrote:
: I actually knew that, but in my head $key_b and $value_b were single words. 
: But according to S02, the interpolation is protected by quotes. That is, if 
: $key_b is q0/printf "Hello, world\n" or die"/, that's four words, correct? Or 
: is it just if the quotes actually appear in the quoting construct? Basically 
: I'm wondering if there's a detailed specification of how <<>> should work.

That's a really good question, and since I don't offhand know the
right answer, I'll put this up onto the fence so it can topple over
into p6l-land where there are many king's horses and many king's men,
and the question is who's to be master, that's all.

My feeling is that we want to allow both kinds of quoting, one to protect
against interpolation, and one to protect against splitting, but not
allow levels to be mixed.  That is, the outer quotes will cause
any interpolation inside them to be treated as a "word" string without any
consideration of any of the characters inside, even if they happen
to be spaces or quote characters.  The outer quotes must therefore
nest correctly without considering whether there might be inner
quotes of the same sort.

So we distinguish quoted interpolation from unquoted, and for unquoted
interpolation, we look for inner quotes after interpolation and treat
them as protection against splitting just as if they'd been outer quotes.

I think that works, and won't be terribly surprising to shell
programmers, but it still needs some caffeinated thinking.  It's not
at all clear to me at this point whether we should allow the q forms
of quoting on either/both levels, or stick with shell-ish quotes.
I can argue that one multiple ways.

: Several only-slightly-related questions about interpolating:
: 1. qq x$varx eq $var? (That's how it works in Perl5, anyway)

I think I'd prefer that we disallow alphanumeric delims in P6.
(But if we did allow them, it would consider the second x to be part
of the variable name, since we're looking for the final delimiter
only when we're not scanning an internal token, or nested construct.)

: 2. If the delimiter is not a single character (I think this only applies to 
: <<>>), does a backslash protect the first character or both? For example, in
:  <<some words \>>> or die
: Is that three words ['some', 'words', '>'] with the >> ending the construct, 
: or is that ['some', 'words', '>>>', 'or', 'die']? (and the rest of the file 
: is interpolated and split into words)

I would look at it from the other direction.  When used as a quote
rather than a meta-syntax starter, backslash only ever quotes a
single character, never a token.  However, the fact that the final
delimiter has to be >> means that if you backwhack the first one,
it is not available for token comparison, so the second one can only
be the first > of a >> pair, and if the next character happens not
to be >, both of your >> become part of the string, so it looks as
if the backslash protected both of them.  However, \>>> terminates with
a final > as part of the string.

: 3. Are <<>>-style delimiters allowed in other quoting constructs? Is 
: q<<Hello>> the string "Hello", or the string "<Hello" followed by the 
: greater-than sign? (As you can probably tell, I haven't implemented <<>> yet 
: at all.)

I think in general only single characters may be used for pick-your-own
quotes, but if we make any exception, <<...>> would be it, on the
grounds that some would-be Texan might translate all «...» to <<...>>
and then wonder why things break.  But I always try to have six
breakfasts before I believe anything impossible.

As long as this is going over the fence to p6l, we might as well
solicit opinion on this one as well, maybe with a different subject.

: My head hurts. :-)

Eventually the endorphins kick in, and it wraps around to the other end.  :-)

: By the way, something tells me perl6-compiler isn't the best place for this 
: discussion. Is there a secret group of people that discusses cornercases for 
: perl6, and if so could someone tell me on what list they live?

As Patrick said, we ain't picky, as long as everyone remains sensitive
to the fact that long-running speculative threads do p6c little good,
and p6l little harm.


Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About