use strict; use warnings; my $re0; my $re1; our $s_pos; $re1 = qr/ (?{ local $s_pos = pos; }) [A-Z] (?{ print("[", substr($_, $s_pos, pos()-$s_pos), "]\n") }) /x; $re0 = qr/ (??{ $re1 }) (??{ $re1 }) /x; 'abcDE' =~ $re0; __END__ output ====== [D] [E]