use warnings; use strict; my @dic = qw#beriberi hanabbsbbshana#; for (@dic) { my $pat = $_; print "trying to match $pat\n"; print "matched $pat\n" if $_ =~ m#^(hana)(bbs)?(?(1)\2\1|\1)$#; } my @pat = qw#AAAAG AC GC AZG ZC AAAG#; for ( @pat ) { my $pat2 = $_; print "matching $pat2\n"; print "matched $pat2\n" if $_ =~ m#[ATGC]+(?(?<=AA)G|C)$#; }