$string = 'abcd'; $regex = '^' . join '', map "[^$_]*$_", map quotemeta, split //, $string; # embed capture to get offset: $regex =~ s/(?<=\*)/(/; $regex =~ s/$/)/; $sequence = 'xxxxxaxxxxxxbxxxxxcxxxxdxxxxx'; if($sequence =~ /$regex/s) { printf "I found a match, at offset %d and with total length %d\n", $-[1], $+[1]-$-[1]; }