use Data::Dumper; use Carp; use threads; sub new { my $class = shift; croak "Port number required" unless(@_); my $port :shared = shift; my %buffer :shared; my %self :shared = ( 'port' => \$port, 'buffer' => \%buffer, ); bless(\%self, $class); threads->create('_RXserver', \%self)->detach(); return \%self; } sub _RXserver { local *__ANON__ = '_RXserver'; my $self = shift; # $self->{'buffer'}->{'172.0.0.1:40000'} = 'value'; #works $self->{'buffer'}->{'172.0.0.1:40000'}->{'read'} = 'value'; #fails print Dumper $self; }