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" :)
|
|---|