use strict; use warnings; my $re; $re = qr/ (\d) (?{ print("[$1]\n") }) /x; 'thr33' =~ $re; __END__ output ====== [3] #### use strict; use warnings; my $re0; my $re1; $re1 = qr/ (\d) (?{ print("[$1]\n") }) /x; $re0 = qr/ (??{ $re1 }) /x; 'thr33' =~ $re0; __END__ output ====== Use of uninitialized value in concatenation (.) or string at (re_eval 1) line 1. [] #### use strict; use warnings; my $re0; my $re1; $re1 = qr/ (\d) (?{ print("[$-[0]]\n") }) /x; $re0 = qr/ (??{ $re1 }) (??{ $re1 }) /x; 'thr33' =~ $re0; __END__ output ====== [3] [3] expected ======== [3] [4]