use strict; use warnings; my %colours = ( 'baby blue' => 'BB', 'baby pink' => 'BP', 'dark blue' => 'DB', 'dark purple' => 'DP', 'hot pink' => 'HP', 'light purple' => 'LP', 'pink' => 'PK', 'pinkish' => 'PI', ); my $colourMatch = join '|', sort {length $b <=> length $a || $a cmp $b} keys %colours; for my $colour ('baby blue', 'baby pink', 'baby green', 'pink', 'pinkish') { if ($colour =~ /($colourMatch)/) { print "Matched $colour: $colours{$1}\n"; } else { print "Unmatched: $colour\n"; } }