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" :)
In reply to Re: Problems with array references in shared hash values
by BrowserUk
in thread Problems with array references in shared hash values
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |