Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Re: Silly question about function args

by integral (Hermit)
on Feb 09, 2003 at 09:46 UTC ( #233869=note: print w/ replies, xml ) Need Help??


in reply to Re: Silly question about function args
in thread Silly question about function args

The fastest way to pass arguments is not to copy them at all, and to access them inplace in @_. (This of course doesn't make readable code). The test case below illustrates this poorly for a simplified function.

Update: BrowserUk's answer demonstrates this better.

use Benchmark qw/cmpthese/; sub s1 {my ($arg1, $arg2, $arg3) = @_; $arg+$arg2+$arg3 }; sub s2 { my $arg1 = shift; my $arg2 = shift; my $arg3 = shift; $arg1+$ +arg2+$arg3} sub s3 {$_[0] + $_[1] + $_[2] } cmpthese(200000, { shift => ' { s2(1,2,3) }', list => ' {s1(1,2,3)}', none => ' {s3(1,2,3)}', }) Benchmark: timing 200000 iterations of list, none, shift... list: 4 wallclock secs ( 1.39 usr + 0.00 sys = 1.39 CPU) @ 14 +3884.89/s (n=200000) none: 1 wallclock secs ( 0.70 usr + 0.01 sys = 0.71 CPU) @ 28 +1690.14/s (n=200000) shift: 2 wallclock secs ( 1.46 usr + 0.03 sys = 1.49 CPU) @ 13 +4228.19/s (n=200000) Rate shift list none shift 134228/s -- -7% -52% list 143885/s 7% -- -49% none 281690/s 110% 96% --

--
integral, resident of freenode's #perl


Comment on Re: Re: Silly question about function args
Download Code
Re: Re: Re: Silly question about function args
by demerphq (Chancellor) on Feb 09, 2003 at 10:10 UTC
    The fastest way to pass arguments is not to copy them at all

    Exactly. Inline the function entirely. Thats much faster.

    and to access them inplace in @_

    Persoanlly I would caution against this. An innocuous change of

    my $foo=shift; $foo=~s/A.//g; # to $_[0]=~s/A.//g;
    Would alter the original variable. Better to do away with the subroutine entirely. Then at least this effect is obvious and as I said you avoid the subroutine jump overhead.

    --- demerphq
    my friends call me, usually because I'm late....

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (3)
As of 2014-09-21 03:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (166 votes), past polls