in reply to Re^2: Perl Regular Expression inconsistency
in thread Perl Regular Expression inconsistency

By that logic an unmatched ')' doesn't mean anything so shouldn't need to be escaped, yet it generates an error.

japhy's eplanation is satisfying for unmatched '{' and '}' and extends to an unmatched ']' too. Why not extend the argument to an unmatched ')'? Is that so much more likely a "You Really Mean That?" error that it's worth special casing?


DWIM is Perl's answer to Gödel
  • Comment on Re^3: Perl Regular Expression inconsistency

Replies are listed 'Best First'.
Re^4: Perl Regular Expression inconsistency
by hv (Prior) on Mar 14, 2006 at 21:00 UTC

    I think this is a kind of Huffman coding issue - in regular expressions, parens are far more often used for capturing than for literal matching; on balance a lone paren is more likely to be intended to be part of a capturing pair, so it makes sense to assume that and raise an error.

    Braces on the other hand are rarely used in their meta sense, so it helps more people to assume that braces are intended for a literal match except when they strictly match the pattern required to express a repetition count.

    That I think is the intention, at least. You could argue that it should be inverted - that because the meta braces are used more rarely, the average user needs more help to use them correctly - but for this kind of trade-off perl tends to favour the expert user rather than the learner.

    Hugo

Re^4: Perl Regular Expression inconsistency
by wazoox (Prior) on Mar 14, 2006 at 21:38 UTC
    I think the answers lies into the source code :) Perhaps ')' doesn't work because of some obscure compatibility problem or... OK, I'll check perl source, promise !
    update: I've quickly browsed thru perl code (toke.c especially) and I didn't find the clear difference... Well, I'll dig it deeper later.