use strict; use warnings; use Benchmark; my @list = ( 1 .. 500 ); my $count = 25000; timethese ( $count, { 'Map' => sub { my $result = 1; map { $result *= $_ } @list; }, 'For' => sub { my $result = 1; $result *= $_ for @list; } } ); __OUTPUT__ Benchmark: timing 25000 iterations of For, Map... For: 11 wallclock secs (10.62 usr + 0.00 sys = 10.62 CPU) @ 2355.16/s + (n=25000) Map: 11 wallclock secs (11.18 usr + 0.00 sys = 11.18 CPU) @ 2236.94/s + (n=25000)
The moral... There's no way to perform a mathematical operation based on the value of each element of a list of arbitrary values, without looking at each element of the list. And that implies (and requires) some from of iteration. map and for seem to be pretty close to each other in terms of efficiency in iterating over the list.
On the other hand, if the list consists of a known sequence, it is possible to break out the math-fu to derive a non-iterative solution. Brute force is necessary in the absence of a known mathematical sequence though.
Dave
In reply to Re: Re: Re: Product of a list of numbers?
by davido
in thread Product of a list of numbers?
by ruffer_rinsin
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |