#! perl -slw use strict; use threads; use threads::shared; my $some_id = 1; ## Make the scalar shared my $scalar_data :shared = 'fred'; my %planets :shared; my %el :shared = ( 'data' => \$scalar_data, ## reference to shared scalar 'atime' => time, 'deleted' => 0, 'modified' => 0 ); $planets{$some_id} = \%el; ## Lock the shared hash (%el) by indirection lock %{ $planets{$some_id} }; ## Or lock the data itself via indirection lock ${ $planets{ $some_id }{ data } };