Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Re: Silly question about function args

by integral (Hermit)
on Feb 09, 2003 at 09:46 UTC ( [id://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

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://233869]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (1)
As of 2024-04-25 02:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found