use warnings; my $s = "s1"; print "define var: $s\n"; &test; my $s = "s1-2nd"; print "define var: $s\n"; &test; sub test{ print "sub: $s\n"; } #### "my" variable $s masks earlier declaration in same scope at test.pl line 8. define var: s1 Use of uninitialized value $s in concatenation (.) or string at test.pl line 13. sub: define var: s1-2nd sub: s1-2nd #### use warnings; my $s = "s1"; print "define var: $s\n"; &test; sub test{ print "sub: $s\n"; } my $s = "s1-2nd"; print "define var: $s\n"; &test; #### "my" variable $s masks earlier declaration in same scope at test.pl line 12. define var: s1 sub: s1 define var: s1-2nd sub: s1 #### define var: s1 sub: s1 define var: s1-2nd sub: s1-2nd