in reply to alpha vs alpha numeric
I don't know what you're comparing with the regex, but you do have to include the preceding "m" in a regex when you chose to use delimiters different than the default slashes, eg.:
if (($ref->{prodname} =~ m($value)) || ($ref->{key1} =~ m($value)))
You may also consider testing with eq if you want everything stringified.
In Section
Seekers of Perl Wisdom