package Package1;
use fields qw(attr1 attr2 attr3);
sub new {
my Package1 $self = shift;
$self = fields::new($self) unless ref $self;
$self->{attr1} = "init_1";
$self->{attr2} = "init_2";
$self->{attr3} = "init_3";
return $self;
}
1;
####
use Package1;
use Data::Dumper;
my Package1 $p = Package1->new;
$p->{attr1} = "set_1";
print $p->{attr1}, "\n";
$p->{attr4} = "set_4"; #this should fail, and did fail
####
use Package1;
use Data::Dumper;
my Package1 $p = Package1->new;
$p->[0]->{attr4} = 4;
$p->[$p->[0]->{attr4}] = "set_4";
print $p->[0]->{attr4};#the above two steps sunccessfully modified the internal pseudo hash
print Dumper($p);#again proves that I successfully modified the internal pseudo hash
#print $p->{attr4};#this fails