use warnings; use strict; use Data::Dump qw/pp/; my @needles = ('adam west', 'daric dalon','tom helic','todd nick', 'riley remer'); my @haystack = ('adam west 12', 'daric dalon mr.','tom helic (fads)', 'todd nick (456)','riley remer','john steve','dim madz 12'); my ($needle_regex) = map { qr/$_/i } join '|', map {quotemeta} sort { length $b <=> length $a or $a cmp $b } @needles; for my $str (@haystack) { if ( my ($match) = $str=~/($needle_regex)/ ) { print pp($str)," matches on ",pp($match),"\n" } else { print pp($str)," doesn't match\n" } } __END__ "adam west 12" matches on "adam west" "daric dalon mr." matches on "daric dalon" "tom helic (fads)" matches on "tom helic" "todd nick (456)" matches on "todd nick" "riley remer" matches on "riley remer" "john steve" doesn't match "dim madz 12" doesn't match