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