#!/usr/bin/perl use warnings; use strict; use feature 'say'; my $sample = "A-E-H-L"; my @options = ( "A-B-F-G-H-K-M", "A-E-G-H-L", "A-C-E-G-H-J-L", "B-F-H-K", "A-B-F-G-H-K-L", "C-H" ); my @search_for = split /-/, $sample; my $re = '(?:^|-)' . join('(?:-|-.*-)', @search_for) . '(?:-|$)'; say for grep /$re/, @options;