in reply to use constant for strings

Personally, I wouldn't use this way of doing things. I would, instead, create an object that encapsulates this information, as thus:
package States; use Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw( is_state get_capitol ); use strict; my %abbrev = ( WISCONSIN => 'WI', ); my %expand = reverse %abbrev; my %capitals = ( WI => 'MADISON', ); sub is_state { my $state = uc shift; return 1 if exists $abbrev{$state}; return 1 if exists $expand{$state}; return 0; } sub get_capital { my $state = uc shift; $state = $abbrev{$state} if exists $abbrev{$state}; return $capitals{$state}; } 1;
I'll leave the implementation of the rest of the possibilities as an exercise for the reader.

Extra credit is given if the reader finds the CPAN solution. :-)

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.