use strict; use warnings; my %states= ( AL=>'alabama', AK=>'alaska', AZ=>'arizona', AR=>'arkansas', CA=>'california', CO=>'colorado', CT=>'connecticut', DE=>'delaware', FL=>'florida', GA=>'georgia', HI=>'hawaii', ID=>'idaho', IL=>'illinois', IN=>'indiana', IA=>'iowa', KS=>'kansas', KY=>'kentucky', LA=>'louisiana', ME=>'maine', MD=>'maryland', MA=>'massachusetts', MI=>'michigan', MN=>'minnesota', MS=>'mississippi', MO=>'missouri', MT=>'montana', NE=>'nebraska', NV=>'nevada', NH=>'new hampshire', NJ=>'new jersey', NM=>'new mexico', NY=>'new york', NC=>'north carolina', ND=>'north dakota', OH=>'ohio', OK=>'oklahoma', OR=>'oregon', PA=>'pennsylvania', RI=>'rhode island', SC=>'south carolina', SD=>'south dakota', TN=>'tennessee', TX=>'texas', UT=>'utah', VT=>'vermont', VA=>'virginia', WA=>'washington', WV=>'west virginia', WI=>'wisconsin', WY=>'wyoming', ); sub test { my %x; for my $x (sort keys %states) { for my $y (sort keys %states) { last if $y ge $x; my $ref= join '', sort grep { $_ ne ' ' } split //, $states{$x}.$states{$y}; push @{$x{$ref}}, "$x.$y"; } } for my $r (keys %x) { next if @{$x{$r}}==1; #printf("%-40s: %s\n", $r, join(", ", @{$x{$r}})); last; } } test() for (0..999);