Wiggins has asked for the wisdom of the Perl Monks concerning the following question:
I am attempting to create a shared hash, with each keyed member containing scalars for period start, period end, period total; and an array of decay stages. The initialization currently does not cause any error messages:
Clean compile does not mean this really does what I want.our %WA: shared; our $WAlock: shared; ... my ($key, $dtg, $bytes) = @_; if (!defined $WA{$key}) { { lock $WAlock; $WA{$key} = &share({}); #hook shared anon hash; { lock $WA{$key}; $WA{$key}{PS}=$dtg; # PS period Start $WA{$key}{PE}=$dtg + $secs; # PE period End $WA{$key}{PT}=0; # PT period Total $WA{$key}{stgs} =(); # list of decaying values for my $i (0..$rnds-1){ $WA{$key}{stags}[$i]=0; # init all stages to 0 } } } } # end of (! defined) entry being initialized
The problem is when I attempt to do some array manipulations (unshift) on the set of decay stages. Here I am trying (unsuccessfully) to address the array for the 'unshift' command.
So ... I am lost the forest of braces and brackets... How do I code access to that 'stags' list? <<bow>>sub reportWA{ # $key my $key = shift; my $NewWA; unshift @{WA{$key}{stags}}, $WA{$key}{PT}; #insert PT at [0] -line +110 $NewWA=$WA{$key}{PT}; # $periodTotal * 1 $#{@{WA{$key}{stags}}} = $rnds-1; # truncate off oldest stage for my $i (1..$rnds-1){ ${WA{$key}{stags}}[$i] *= $wght; #stag[n] = initial * (wght**n) $NewWA += ${WA{$key}{stags}}[$i]; } #plog sprintf "stages = %s" ,join (", ",@stags); $NewWA /= $rnds; printf " %d %d %8.2f %s\n" , $key,$WA{$key}{PE} ,$NewWA, join (", ",@{WA{$key}{stags}}); } ------- Errors generated start with these : Scalar value @{WA{$key} better written as ${WA{$key} at ThWgtAvg1.pl l +ine 110. Useless use of unshift with no values at ThWgtAvg1.pl line 110. Scalar value @{WA{$key} better written as ${WA{$key} at ThWgtAvg1.pl l +ine 113. Scalar value @{WA{$key} better written as ${WA{$key} at ThWgtAvg1.pl l +ine 121. Type of arg 1 to unshift must be array (not hash slice) at ThWgtAvg1.p +l line 110, near "}{stags" syntax error at ThWgtAvg1.pl line 110, near "}{stags" ...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Referencing an array in a complex hashed data structure
by kyle (Abbot) on Dec 08, 2008 at 19:48 UTC | |
|
Re: Referencing an array in a complex hashed data structure
by GrandFather (Saint) on Dec 08, 2008 at 19:51 UTC | |
|
Re: Referencing an array in a complex hashed data structure
by kennethk (Abbot) on Dec 08, 2008 at 19:45 UTC | |
by Wiggins (Hermit) on Dec 08, 2008 at 20:04 UTC | |
|
Re: Referencing an array in a complex hashed data structure
by BrowserUk (Patriarch) on Dec 08, 2008 at 20:00 UTC | |
by Wiggins (Hermit) on Dec 08, 2008 at 20:17 UTC |