in reply to Re^4: Hash sorting (by value) woes
in thread Hash sorting (by value) woes

True, but it would be slower.

print map { ...1... } ...2...;

is closer to

@temp_list = map { ...1... } ...2...; print @temp_list;

than to

print ...1... foreach ...2...;

The extra assignment slows things down. (About twice as slow, IIRC previous tests.)

Update: Fixed brain fart R.J. noticed.

Replies are listed 'Best First'.
Re^6: Hash sorting (by value) woes
by Roy Johnson (Monsignor) on Feb 24, 2005 at 18:03 UTC
    Isn't it more like
    @temp_list = map { ...1... } ...2....; print @temp_list;
    ? The map is done before print sees it, and print is only called once, with a list. It is slower, of course, because you do have an extra list-building step. Interestingly, it is not slower than map in a void context (I'm using 5.8.0 here -- when was that optimized?):
    use Benchmark 'cmpthese'; my @vals = (10_000..15_000); open(ABYSS, '>', '/dev/null') or die "The abyss is closed.\n"; cmpthese(-2, { 'map' => sub { print ABYSS map {">>$_<<\n"} @vals }, 'map_void' => sub { map {print ABYSS ">>$_<<\n"} @vals }, 'for' => sub { print ABYSS ">>$_<<\n" for @vals } }); close ABYSS; __END__ Rate map_void map for map_void 11.9/s -- -23% -50% map 15.5/s 30% -- -34% for 23.6/s 99% 52% --

    Caution: Contents may have been coded under pressure.