use warnings; use strict; my @dic = qw#beriberi hanabbs#; for (@dic) { print "trying to match $_\n"; print $_ if $_ =~ m#^(hana)(bbs)?(?(1)\2\1|\1)$#; }