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

Re^2: new keyword "size" to avoid scalar trap ? ( scalar @array != scalar(LIST) )

by LanX (Chancellor)
on Dec 07, 2012 at 17:28 UTC ( #1007802=note: print w/replies, xml ) Need Help??

in reply to Re: new keyword "size" to avoid scalar trap ? ( scalar @array != scalar(LIST) )
in thread new keyword "size" to avoid scalar trap ? ( scalar @array != scalar(LIST) )

I care less about the name than the functionality, could be also "count" or whatever suits.

I suppose "elems" is already known from ruby or perl6? So why not.¹

But² tobyinks and your suggestion w/o prototypes is considerably slower on large arrays.

DB<106> use Time::HiRes qw(time) DB<107> sub elems { scalar @_ } DB<108> @a=(1..1e6);0 DB<109> $t=time; $count = scalar @a; print time-$t 7.10487365722656e-05 DB<110> $t=time; $count = elems @a; print time-$t 0.0554749965667725

Perl 5.10!

Cheers Rolf

¹) Well the plural in "elems" somehow indicates a list to be returned.

²) as already said

  • Comment on Re^2: new keyword "size" to avoid scalar trap ? ( scalar @array != scalar(LIST) )
  • Download Code

Replies are listed 'Best First'.
Re^3: new keyword "size" to avoid scalar trap ? ( scalar @array != scalar(LIST) )
by Laurent_R (Abbot) on Dec 08, 2012 at 15:46 UTC

    It is most probably the copying of the argument list (the full array) in the function call that takes this time difference.

    Passing a reference to the array would probably solve the issue, but the syntax would become less obvious to use.

      No copying takes place :) however the same amount of scalars is aliased ;)
      Thats why we need prototypes or a special C-implementaton.

      according to the perlsub sub size (+;@) { } could be used, to call

       size @array


       size 1,2,3

      but since I'm using 5.10, I can't test it...

      Cheers Rolf

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1007802]
[stevieb]: I have fixed a boatload of issues across several of my distributions, including a couple that have been nagging for a very long time and were exceptionally difficult to solve. Saving $ before we move, so thought I'd have a code session...
[stevieb]: ...session weekend. Went far better than I could have imagined. Even got a bunch of stuff soldered for another one of my electronics projects on the go, and am working on a fix for a MetaCPAN::Client issue I found
[shmem]: the smaller your boat is, the smaller is the load...
shmem is going to look for problems with C++. Urgh.
choroba has worked on the Pull Request Challenge
[stevieb]: shmem I had to do that yesterday and earlier today (C++ issues). It was only fun after I figured it all out.

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (5)
As of 2017-06-25 22:26 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (571 votes). Check out past polls.