>perl -wMstrict -le "$_ = 'x55x666x7777x1x'; ;; print 'before: $1 is ', defined($1) ? qq{'$1'} : 'undefined'; print R(); print 'after: $1 is ', defined($1) ? qq{'$1'} : 'undefined'; ;; sub R { printf qq{ \$_ is '$_'}; printf qq{ \$1 is %s \n}, defined($1) ? qq{'$1'} : 'undefined'; return s/(\d+)// ? $1 + R() : 0; } " before: $1 is undefined $_ is 'x55x666x7777x1x' $1 is undefined $_ is 'xx666x7777x1x' $1 is '55' $_ is 'xxx7777x1x' $1 is '666' $_ is 'xxxx1x' $1 is '7777' $_ is 'xxxxx' $1 is '1' 4 after: $1 is undefined