簿記も移動平均法もよく分からんが書いて見る。

use POSIX qw(ceil);

my @cost = ([2000,3],[3000,4],[1000,5],[4000,3]);

my ($avg, $num) = @{$cost[0]};
foreach(1..$#cost){
$avg = ceil(($avg*$num+$cost[$_]->[0]*$cost[$_]->[1])/($num+$cost[$_]->[1]));
$num += $cost[$_]->[1];
}
print $avg, "\n";