in reply to Re^2: Unhappy returns
in thread Unhappy returns

Using map is a lot of overhead for just assigning to a hash.
use Benchmark; timethese(1000, { 'map1' => sub { my %str = map {($_,1)} (0..1024); }, 'arry' => sub { my %str = (); @str{0..1024} = (1)x1025; } }); Benchmark: timing 1000 iterations of arry, map1... arry: 1 wallclock secs ( 1.36 usr + 0.00 sys = 1.36 CPU) @ 73 +5.29/s (n=1000) map1: 3 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 32 +1.54/s (n=1000)

Replies are listed 'Best First'.
Re^4: Unhappy returns
by dragonchild (Archbishop) on Oct 10, 2005 at 17:32 UTC
    Overhead how? Depending on what I'm doing, hash-slicing might be harder to maintain than map.
    my %is_month_abbrev = map { $_ => undef } qw( jan feb mar apr may jun jul aug sep oct nov dec ); # versus ... my %is_month_abbrev; @is_month_abbrev{ qw( jan feb mar apr may jun jul aug sep oct nov dec +) } = (undef) x 12; # or, with an intermediate array ... my @months = qw( jan feb mar apr may jun jul aug sep oct nov dec ); my %is_month_abbrev; @is_month_abbrev{@months} = (undef) x @months;
    Often, losing a few micro-seconds is worth readability and maintainability. In both the slicing solutions, I either needed a separate array or hard-coding a magic number. (The number of months in a year isn't always a given. Some calendars have as few as 10, others have up to 14, and still others vary from year to year.)

    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
Re^4: Unhappy returns
by Perl Mouse (Chaplain) on Oct 10, 2005 at 16:00 UTC
    That of course depends entirely on what you do with in the map. I used constant values of 1 just to illustrate my point, and to keep the example as simple as possible.
    Perl --((8:>*