BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:

What does this error mean?

Why does it go away if I remove the :shared attribute from %things?

Does it constitute a bug that should be reported?

#! 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.

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon

Replies are listed 'Best First'.
Re: Error: "Can't return a temporary from lvalue subroutine"?
by dave_the_m (Monsignor) on Jul 04, 2004 at 19:00 UTC
    Does it constitute a bug that should be reported?
    Probably. I'd need to think about it some more to decide if it's fixable, but my all means perlbug it: that way I'm less likely to forget about it.

    Dave.

      Thanks. Sent, acknowledged as [perl #30582].


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algoritm, algorithm on the code side." - tachyon