in reply to Shared hash of anonymous arrays?

You've flagged the wrong line as giving the error:

c:\test>junk Invalid value for shared scalar at c:\test\junk.pl line 8.

The line with the problem is $foo{'bar'} = [$i, $j, $k];

Not $foo{'bar'} = &share([]); #<-- Not what it wants this one.

The problem is that having successfully assigned an anonymous array (reference) to $foo{bar} by disabling the problematic protoype using &share( [] );, you then try to assign a new, completely different anonymous hash reference to it.

Instead of this $foo{'bar'} = [$i, $j, $k]; which (unsuccessfully) attempts to overwrite the shared anonymous hash with a different non-shared anonymous hash with three values in it, you should assign the values through the shared reference like this

@{ $foo{'bar'} } = ( $i, $j, $k );

With that change, your snippet produces

c:\test>junk $foo = { 'bar' => [ #0 '1', #1 '2', #2 '3' ] };

You may find Re: Using threads::shared with multidimensional arrays helpful.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: Shared hash of anonymous arrays?
by KevinZwack (Chaplain) on Aug 29, 2006 at 22:43 UTC
    Thank-you all, that solved my problem!