sub R { printf qq{before: \$_ is '$_'}; printf qq{ \$1 is %s \n}, defined($1) ? qq{'$1'} : 'undefined'; m/(\d+)/g ? $1 + R() : 0; printf qq{after: \$_ is '$_'}; printf qq{ \$1 is %s \n}, defined($1) ? qq{'$1'} : 'undefined'; } $_ = 'a81b2d34c1'; R(); __END__ before: $_ is 'a81b2d34c1' $1 is undefined before: $_ is 'a81b2d34c1' $1 is '81' before: $_ is 'a81b2d34c1' $1 is '2' before: $_ is 'a81b2d34c1' $1 is '34' before: $_ is 'a81b2d34c1' $1 is '1' after: $_ is 'a81b2d34c1' $1 is '1' after: $_ is 'a81b2d34c1' $1 is '1' after: $_ is 'a81b2d34c1' $1 is '1' after: $_ is 'a81b2d34c1' $1 is '1' after: $_ is 'a81b2d34c1' $1 is '1'