in reply to YAPC::NA::2003::mandog

I did not know there was a difference between \1 and $1 inside a regular expression

OK, I'll bite :-) I know that \1 can appear in the match (left) part of a substitution (s///) but $1 can only appear in the replacement. Are there other differences?

Replies are listed 'Best First'.
Re: YAPC::NA::2003::mandog
by Abigail-II (Bishop) on Jun 23, 2003 at 23:24 UTC
    $1 is what was matched by the first set of parenthesis of the last succesful regular expression. It will therefore never refer to (parts of) the current match in progress (ignoring (?{ }) and (??{ }) issues). $1 is a variable - it interpolates just like any other variable; it doesn't have a special meaning inside a regular expression.

    \1 does have a special meaning inside a regular expression: it matches exactly the same (sub)string as was matched by the first set of parenthesis in the current regular expression. It's not a variable, it's a special construct. In other interpolative contexts, it means something else: \NNN means the character with octal value NNN. It's a construct, just like \xNN or \n.

    There's one exception, inside the replacement part of a substitution, \1 .. \9 (so, that's only 9 exceptions, it doesn't work for higher numbers) are equivalent to $1 .. $9, but their use does trigger a warning.

    Abigail