use strict; use warnings; my @states= ( 'alabama', 'alaska', 'arizona', 'arkansas', 'california', 'colorado', 'connecticut', 'delaware', 'florida', 'georgia', 'hawaii', 'idaho', 'illinois', 'indiana', 'iowa', 'kansas', 'kentucky', 'louisiana', 'maine', 'maryland', 'massachusetts', 'michigan', 'minnesota', 'mississippi', 'missouri', 'montana', 'nebraska', 'nevada', 'newhampshire', 'newjersey', 'newmexico', 'newyork', 'northcarolina', 'northdakota', 'ohio', 'oklahoma', 'oregon', 'pennsylvania', 'rhodeisland', 'southcarolina', 'southdakota', 'tennessee', 'texas', 'utah', 'vermont', 'virginia', 'washington', 'westvirginia', 'wisconsin', 'wyoming', ); sub test { my %sigmap; for (my $x=0 ; $x<@states ; $x++) { for (my $y= $x+1 ; $y<@states ; $y++) { my $signature= join '', sort split //, $states[$x].$states[$y]; if ($sigmap{$signature}) { #printf("%s:%s .. %s:%s\n", $states[$x], $states[$y], @states[@{$sigmap{$signature}}]); return 1; } $sigmap{$signature}=[$x,$y]; } } } test() for (0..999);