http://www.perlmonks.org?node_id=1007802


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 (Canon) 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

      or

       size 1,2,3

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

      Cheers Rolf