package foo; sub x { our $bar; # $foo::bar $bar++; my $quz; # a lexical $quz, not accessible outside this sub! } sub z { our $bar; # the *same* $foo::bar $bar++; my $quz; # a *different* lexical $quz } # no $bar here! but: sub w { $foo::bar++; # still the same $foo::bar } #### package bar; our $DEFAULT_QUZ = "World"; sub hello { my $what = shift || $DEFAULT_QUZ; print "Hello, $what!\n"; } package main; bar::hello(); # Hello, World! bar::hello("Alice"); # Hello, Alice! $bar::DEFAULT_QUZ = "Bob"; bar::hello(); # Hello, Bob!