Ah, it's the capturing. I used non-capturing parens. Wrap capturing parens around the guts of each RE and you'll have it... but you'll then find the value you want in $1.
Also, don't rely on $1 unless you've verified that there actually was a match.
Sorry for the confusion. Hope this helps.
Just to clarify, here's the money RE with capturing parens:
print "$1" if m/
(
\$
(?:\d{1,3},?)+
(?:\.\d{0,2})?
(?![.\d])
)
/x;
Note the capturing parens surrounding everything else, as well as the conditional 'if' to prevent your relying on $1 unless the match really occurred.
If you don't mind the performance hit, you could have also avoided the capturing parens by using the $& special variable.
|