why not make your code a little bit more readable (and a bit more perl-ish), by changing this:
# assign valid strings
my @valid = (
'$1',
'$1.11',
'$.11',
'-$1',
'-$1.11',
'-$.11',
'$-1',
'$-1.11',
'$-.11',
);
to something like this, using the qw() operator:
# assign valid strings
my @valid = qw(
$1
$1.11
$.11
-$1
-$1.11
-$.11
$-1
$-1.11
$-.11
);
Of course, if you ever have any spaces in your future tests, this goes mostly out the window, but since your strings seem to fit just fine, I would say it will be a little easier to read and maintain. So long as no one reads the
$- and
$1 as variables, you should be good to go.