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 #### 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 line 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 line 113. Scalar value @{WA{$key} better written as ${WA{$key} at ThWgtAvg1.pl line 121. Type of arg 1 to unshift must be array (not hash slice) at ThWgtAvg1.pl line 110, near "}{stags" syntax error at ThWgtAvg1.pl line 110, near "}{stags" ...