On Sat, Jul 01, 2006 at 03:31:52PM +0300, Markus Laire wrote:
: >+In particular, these forms disable the lookahead for an adverbial 
: >argument,
: >+so while
: >+
: >+    q:n($foo)
: >+
: >+will misinterpret C<$foo> as the C<:n> argument,
: >+
: >+    qn(stuff)
: >+
: >+has the advantage of misinterpreting it as the argument to the C<qn()>
: >+function instead.  C<:)>
: >+
: >+But parens are special that way.  Other bracketing characters are special
: >+only if they can be mistaken for adverbial arguments, so
: >+
: >+    qn[stuff]
: >+
: >+is fine, while
: >+
: >+    q:n[stuff]
: >+
: >+is not.  Basically, just don't use parens for quote delimiters, and always
: >+put a space after your adverbs.
: Why q:n[stuff] is not fine? Shouldn't that pass [stuff] to adverb n?

That's what it does.  But it's not fine if you expected [...] to
delimit the quoted string instead.

: Also, in what way are parens special?
: Doesn't qn(stuff) and qn[stuff] both mean same thing?

Nope, qn(stuff) is always a function call.  q(foo) is always a function
call, not a quote.

: And both q:n(stuff) and q:n[stuff] pass something to adverb n. (First
: passes stuff, second passes [stuff])

That is correct.  My intent with the quote declarator however is that
there be an implicit space after it, so the n on the end of qn no longer
functions as an adverb, at least in terms of looking for a subsequent
argument.  I will attempt to clarify the distinction between quotes
and ordinary macros.  Thanks.


Reply via email to