#! perl -slw use strict; package test; use threads; use threads::shared; my %things : shared; sub new { my( $class, $thing ) = @_; my $self = bless \$class, $class; $things{ $self } = $thing; return $self; } sub thing : lvalue { $things{ $_[ 0 ] }; } sub DESTROY { delete $things{ $_[ 0 ] }; } return 1 if caller; package main; my $test = test->new( '12345' ); print $test->thing; $test->thing = 98765; ## Line 32 print $test->thing; undef $test; __END__ P:\test>perl test.pm 12345 Can't return a temporary from lvalue subroutine at test.pm line 32.