for $pattern (@patterns) { while ($data =~ m/(?=$pattern)/g) { do_recurse($data, pos($data), $pattern); # $data is the source # pos($data) is the found place in the souce ++pos($data); } }