use strict; use warnings; { our $name = 42; # alias to $main::name my $ref_name = \$main::name; # ref to $main::name warn "$main::name - $name - $$ref_name"; package OTHER; # --- still same scope warn "$main::name - $name - $$ref_name"; $name = 666; # w/o strict this would be $OTHER::name warn "$main::name - $name - $$ref_name"; } # out of scope warn "$main::name"; # --- compiletime error! # warn "$name - $$ref_name"; # Variable "$name" is not imported at c:/tmp/pm/our_vs_my.pl line 22. # Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at c:/tmp/pm/our_vs_my.pl line 22. # Global symbol "$ref_name" requires explicit package name (did you forget to declare "my $ref_name"?) at c:/tmp/pm/our_vs_my.pl line 22. our $name; # rebind alias for following scope warn $name; #### 42 - 42 - 42 at c:/tmp/pm/our_vs_my.pl line 9. 42 - 42 - 42 at c:/tmp/pm/our_vs_my.pl line 14. 666 - 666 - 666 at c:/tmp/pm/our_vs_my.pl line 18. 666 at c:/tmp/pm/our_vs_my.pl line 22. 666 at c:/tmp/pm/our_vs_my.pl line 32.