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