my ($seen_opening, $seen_data, $seen_closing); my @filtered = grep { ($seen_opening ||= /DBIC/) # Find opening bound && ($seen_data ||= !/DBIC/) # Find data && !($seen_closing ||= /Dancer/) # Find closing bound } @list; #### my @filtered = grep { (/DBIC/ .. /Dancer/) && !/DBIC/ && !/Dancer/ } @list;