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" ...
In reply to Referencing an array in a complex hashed data structure by Wiggins
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |