package FOO; use warnings; use strict; use Exporter 'import'; our @EXPORT_OK = qw/$bar $baz Baz_Get_Set/; our $bar = 42; # Package global, visible as $FOO:bar my $baz = 66; # Not visible outside FOO - needs accessor sub sub Baz_Get_Set{ defined $_[0] and $baz=$_[0]; return $baz; } 1; #### use warnings; use strict; use feature 'say'; use lib "."; use FOO qw/$bar $baz Baz_Get_Set/; say "\$bar (an imported 'package' variable)=",$bar; say "\$bar (accessed explicitly via package name \$FOO::bar)=",$FOO::bar; $bar="Set via caller"; say "\$bar (accessed explicitly via package name \$FOO::bar after setting via imported var)=",$FOO::bar; say "\$baz (direct attempt to access package 'my` variable)=",$baz; # This returns UNDEF say "BAZ via getter/setter=",Baz_Get_Set(); # Nothing passed - this is a GET say "BAZ get after setting to 55=", Baz_Get_Set(55); #### bash-5.1$ perl pm11149136.pl $bar (an imported 'package' variable)=42 $bar (accessed explicitly via package name $FOO::bar)=42 $bar (accessed explicitly via package name $FOO::bar after setting via imported var)=Set via caller Use of uninitialized value $baz in say at pm11149136.pl line 11. $baz (direct attempt to access package 'my` variable)= BAZ via getter/setter=66 BAZ get after setting to 55=55