use warnings; use strict; use Data::Dumper; my $sample = "AEHL"; my $mc = join '.*', split //, $sample; my @options = ( "ABFGHKM", # idx = 0 "AEGHL", # idx = 1 "ACEGHJL", # idx = 2 "BFHK", # idx = 3 "ABFGHKL", # idx = 4 "CH" # idx = 5 ); my @matches; for my $i (0 .. $#options) { push @matches, $i if $options[$i] =~ /$mc/; } print Dumper(\@matches); __END__ $VAR1 = [ 1, 2 ];