Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Subroutines: Returning a hash vs. hash reference

by pg (Canon)
on Nov 28, 2002 at 04:40 UTC ( #216239=note: print w/replies, xml ) Need Help??


in reply to Subroutines: Returning a hash vs. hash reference

Performance is different, and return hash ref has a much better performance. Try the following test: (I tried 1000 by 200, return hash cost 20 secs, when return ref only cost 13 secs. Well... you can see how slow my PC is.)

use strict; sub return_hash { my %hash; for (0..shift) { $hash{$_} = $_; } return %hash; } sub return_hash_ref { my %hash; for (0..shift) { $hash{$_} = $_; } return \%hash; } my $ti = time(); for (0..$ARGV[1]) { my %hash = return_hash($ARGV[0]); } print "return hash takes: ", time() - $ti, " secs\n"; $ti = time(); for (0..$ARGV[1]) { my $hash = return_hash_ref($ARGV[0]); } print "return hash REF takes: ", time() - $ti, " secs\n";

Replies are listed 'Best First'.
Re: Re: Subroutines: Returning a hash vs. hash reference
by mt2k (Hermit) on Nov 28, 2002 at 04:50 UTC
    /me mutters something along the lines of "Why didn't I think of that?" :)

    Anyhow, I went as far as 2000x2000 and got the following results:

    return hash takes: 32 secs return hash REF takes: 11 secs
    This demonstrates that hash REFs do indeed run much faster. I suppose that returning a regular hash requires that the interpreter copy the data structure... likely doubling the memory required to keep the data structure memorized.

    Thanks a lot, I do believe I have got an answer to my "problem".

      It's actually worse than just copying the data structure...it first flattens the structure to a list of (key0, value0, key1, value1,...) then has to re-construct the hash by re-hashing all the keys. Its the latter part that takes most of the time.


      Okay you lot, get your wings on the left, halos on the right. It's one size fits all, and "No!", you can't have a different color.
      Pick up your cloud down the end and "Yes" if you get allocated a grey one they are a bit damp under foot, but someone has to get them.
      Get used to the wings fast cos its an 8 hour day...unless the Govenor calls for a cyclone or hurricane, in which case 16 hour shifts are mandatory.
      Just be grateful that you arrived just as the tornado season finished. Them buggers are real work.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://216239]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (5)
As of 2022-10-07 09:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My preferred way to holiday/vacation is:











    Results (29 votes). Check out past polls.

    Notices?