my $dollar1; case /^\s*(\S+)$ (?{ $dollar1 = $1 })/ { ... #### use strict; use warnings; sub do_re { my ($re, $var) = @_; $var =~ /$re/; print("inside: $1\n"); } { my $re = qr/(b)/; print("$re\n"); do_re($re, 'abc'); if (defined($1)) { print("outside: $1\n"); } else { print("outside: [undef]\n"); } } print("\n"); { my $dollar1; my $re = qr/(e)(?{ $dollar1 = $1 })/; print("$re\n"); do_re($re, 'def'); if (defined($dollar1)) { print("outside: $dollar1\n"); } else { print("outside: [undef]\n"); } } __END__ (?-xism:(b)) inside: b outside: [undef] (?-xism:(e)(?{ $dollar1 = $1 })) inside: e outside: e