in reply to classifying data

Here's my take on it, which I now notice looks decidedly similar to at least one other example. Without the possibility of commas as thousands-separators, it's about half the length it is here. Also, note that the plus/minus must always precede the dollar sign (to fix this, make [+\-]?\$? into (([+\-]?\$?)|(\$?[+\-]?)). (Can those parens be eliminated somewhat? I don't know off the top of my head.)
#!/usr/bin/perl -w # bunched up: /^[+\-]?\$?(\d+(\.\d+)?)(\d{1,3}(,\d\d\d)+(\.\d+)?)$/ $match = qr/^ [+\-]? # optional sign \$? # optional dollar ( # version without commas \d+ # one or more digits (\.\d+)? # optional decimal-plus-more-digits ) ( # version with commas \d{1,3} # one to three digits (,\d\d\d)+ # groups of three (\.\d+)? # optional decimal-plus-more-digits ) $/x; while (<DATA>) { chomp; print "$_: ".(($_ =~ $match) ? 'num' : 'non-num')."\n"; } __DATA__ 1020 $10.21 -1023 +1.024 beer 10$25 -$102.6 A1027 10,000 15,00,000 10,000.001 1028$ $ $-1.029
--grendelkhan