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. #### use threads; use threads::shared; my %h : shared; my $ar : shared = []; $h{test} = $ar; #### use threads; use threads::shared; my %h : shared; my $ar = []; $h{test} = share( $ar ); #### use threads; use threads::shared; my %h : shared; $h{test} = share( [] ); Type of arg 1 to threads::shared::share must be one of [$@%] (not single ref constructor) at (eval 6) line 1, near "] )"