in reply to Threading: Invalid value for shared scalar
The problem is that you cannot (yet) share a nested references using threads::shared.
What you are sharing is not a hash but a scalar $HSH2. You are then
Too many words, but your 2 lines of code
our $HSH2 : shared = (); $HSH2{123}{456} = "foo.xml"; # fails
Is equivalent to
# Why initialise a scalar to an empty list? our $HSH2 :shared = (); # Assign a ref to an anonymous hash $HSH2 = {}; # Assign a ref to another anon. hash to a new element of the first. $HSH2->{123} = {}; # Assign a string to an element of the second. $HSH2->{123}->{456} = 'foo.xml';
threads::shared only allows you to share a single level of shared structure, and this is three levels deep, hence the "Invalid value" .
Not a very good error message. It ought really read something like:
Assigning a reference to an element of a shared hash or array is not allowed.
I'm also not certain that sharing an our'd variable is a "good thing", as it is a lexified global. May be fine, but I've never tried it and it gives me an uneasy feeling.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Threading: Invalid value for shared scalar
by P0w3rK!d (Pilgrim) on May 20, 2003 at 20:18 UTC | |
by spazm (Monk) on Oct 01, 2009 at 21:06 UTC | |
by hexcoder (Curate) on Jul 03, 2015 at 12:05 UTC | |
by BrowserUk (Patriarch) on Jul 03, 2015 at 12:42 UTC | |
by Anonymous Monk on Feb 26, 2015 at 13:10 UTC |