It is possible to use references as values in a shared hash, but you have to also share the reference.
use threads;
use threads::shared;
my %h : shared;
$h{test} = [];
Invalid value for shared scalar at (eval 4) line 1, <> line 4.
my $ar = [];
$h{test} = $ar;
Invalid value for shared scalar at (eval 6) line 1, <> line 6.
share $ar;
$h{test} = $ar;
## No error this time.
You could also do this as
use threads;
use threads::shared;
my %h : shared;
my $ar : shared = [];
$h{test} = $ar;
Or even
use threads;
use threads::shared;
my %h : shared;
my $ar = [];
$h{test} = share( $ar );
but the attempt to cut out the temporary variable and write
use threads;
use threads::shared;
my %h : shared;
$h{test} = share( [] );
Type of arg 1 to threads::shared::share must be one of [$@%] (not sing
+le ref constructor) at (eval 6) line 1, near "] )"
gives an error because of what the threads::shared pod terms "perl's prototyping problems" :)
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
|