in reply to calculate average from range of hash values (optimize)
You can make the array index start in zero:
#!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); my $data = []; my $start = 10000; my $end = 30000; $data->[$_ - $start] = rand for ($start .. $end); print average($data, 15000, 25000), "\n"; cmpthese(50, { orig => sub { average($data, 15000, 25000) } }); sub average { my ($data, $start_point, $end_point) = @_; my $count = $end_point - $start_point + 1; my $amount; $amount += $data->[$_ - $start] for ($start_point .. $end_point); return $amount / $count; }
|
|---|