#!perl use v5.10; use strict; use warnings; my $a = shift; sub f { say "global f ($a)"; } f(); sub g { my ($a) = @_; say "global g ($a)"; sub f { say "local f ($a)"; # line 17 } f(); } f(); g(shift); say "main1 $a"; $a = shift; say "main2 $a"; f(); g(shift); f(); __END__ C:\Temp>localsub.pl AAA BBB CCC DDD Variable "$a" will not stay shared at C:\Temp\localsub.pl line 17. Subroutine f redefined at C:\Temp\localsub.pl line 16. Use of uninitialized value $a in concatenation (.) or string at C:\Temp\localsub.pl line 17. local f () Use of uninitialized value $a in concatenation (.) or string at C:\Temp\localsub.pl line 17. local f () global g (BBB) local f (BBB) main1 AAA main2 CCC local f (BBB) global g (DDD) local f (BBB) local f (BBB)