Is it really more efficient?
I got the impression that 'efficient' was more to do with line consumption than CPU cycles, and even if it is do with CPU cycles, map should be just as fast as a foreach if not faster in this situation. Let's see ...
use strict;
use Benchmark 'cmpthese';
my @y_vals = my @x_vals = 1 .. 50;
cmpthese(-10, {
map => sub {
return map "($x_vals[$_],$y_vals[$_])", 0 .. $#x_vals
},
for => sub {
my @ret;
$ret[$_] = "($x_vals[$_],$y_vals[$_])"
for 0 .. $#x_vals;
return @ret;
},
});
__output__
Benchmark: running for, map, each for at least 10 CPU seconds...
for: 11 wallclock secs (10.19 usr + 0.00 sys = 10.19 CPU) @ 75
+36.80/s (n=76800)
map: 11 wallclock secs (10.34 usr + 0.01 sys = 10.35 CPU) @ 77
+68.31/s (n=80402)
Rate for map
for 7537/s -- -3%
map 7768/s 3% --
Ever so slightly faster, but essentially negligble. As always, take with a grain of salt. But I'd say that's about as quick as your going to get without going down the dark path of optimization.
HTH
_________ broquaint | [reply] [d/l] |
Well - I meant that guy has a particular problem with his program chocking after the 22'd line. Your code does not address this problem.
| [reply] |
Indeed, as I confessed on the CB, my understanding of the question was somewhat lacking (according to AnonyMonk, I was correct :). Although, if that line is messing up the CGI it would be rather strange indeed, unless either @x and @y_values are huge datasets and the server is timing out/dying, or they're really array references, being treated as arrays, and therefore chocking (sic).
HTH
_________ broquaint
| [reply] |