in reply to Problems with array references in shared hash values

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