in reply to Re^3: pricing and phone number regexes
in thread pricing and phone number regexes

Thanks again for the regexes but I can't seem to get them to work..either of them. I must be doing something wrong, can you or anyone else take a quick look to see what it might be? It's still use of uninitialized value errors.
$/="====\n\n"; open (READFROM, "$readfrom") or die "Cannot open $readfrom: $!"; open (WRITETO, ">$writeto") or die "Cannot open $writeto: $!"; while ( <READFROM> ) { chomp; $_ =~ m/\$ (?:\d{1,3},?)+ (?:\.\d{0,2})? (?![.\d]) /x; my $price = "$2"; print "$price\n"; } close (WRITETO) or die "Cannot close $writeto: $!"; close (READFROM) or die "Cannot close $readfrom: $!";

Replies are listed 'Best First'.
Re^5: pricing and phone number regexes
by davido (Cardinal) on Jun 05, 2004 at 04:51 UTC
    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.


    Dave