package Foo;
use warnings;
use strict;
my %data = qw/foo bar/;
our $AUTOLOAD;
sub AUTOLOAD {
my ($self, @args) = @_;
my ($pkg, $field) = (__PACKAGE__, $AUTOLOAD);
$field =~ s/${pkg}:://;
## uncommenting any of these, makes the code work
#%data;
#() = %data;
#map $_, %data;
#map $_, \%data;
#$::qwerty123 = %data;
eval "*$field = sub { return \\%$field; };";
$@ and die "eval failed: $@\n";
goto &$field;
}
1;
####
$ perl -I. -MData::Dumper -MFoo -e'print Dumper (Foo->data)'
Variable "%data" is not available at (eval 1) line 1.
$VAR1 = {};
##
##
$ perl -I. -MData::Dumper -MFoo -e'print Dumper (Foo->data)'
Useless use of private hash in void context at Foo.pm line 16.
$VAR1 = {
'foo' => 'bar'
};
##
##
package main;
use warnings;
use strict;
use Data::Dumper;
print Dumper (Foo->data);