my $set='bat'; my $regexp; for (my $i=1;$i<=length($set);$i++){ my $x=join '|', map {"\\$_"} 1..$i; $regexp.="([$set])(?!$x)"; } if (/^$regexp/){ # do something }