Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Perl Monk, Perl Meditation
 
PerlMonks  

Re^3: Unhappy returns

by Keystroke (Scribe)
on Oct 10, 2005 at 11:09 UTC ( [id://498837]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


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 Perl Mouse (Chaplain) on Oct 10, 2005 at 12: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:>*
Re^4: Unhappy returns
by dragonchild (Archbishop) on Oct 10, 2005 at 13: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?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://498837]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.