in reply to Re: Re: Why is split faster than anonymous arrays?
in thread Why is split faster than anonymous arrays?

From what I see of the code, in one you are moving a string in and splitting and returning a list; and in the other you are dereferencing an array ref and making a new list from that array's elements.

Breaking it down further, I'd say what you are really benchmarking is the speed difference between creating a new set of scalars and upping the refcount on an existing set of scalars.

Both move a single scalar, both create and return a list, but one creates new scalars and another must run an array down and return all it's guts after changing each one. Running the benchmark below, I get split losing just barely on linux but the difference varied from 1-5% so I'd say that they are basically equivalent Benchmark wise. I'd say the difference you see is either a poorer split implementation or a variation in how the OS's deal with memory allocation and paging. And, I'd stop worrying about it and start coding the way you like.

#!/usr/bin/perl -w use strict; use Benchmark qw(cmpthese); use vars qw($d $e @t); $d = <DATA>; my @e = split " ", $d; $e= \@e; sub sss { my $q=shift; return (split m/ /, $q) } sub aaa {my $q=shift; return @$q} print $d,$/,sss($d),$/,aaa($e),$/; cmpthese ( -10, { split=> '@t = sss($d)', arref=> '@t = aaa($e)', }); __DATA__ a b c d e f g h i j k l m n o p q r s t u v w x y z

--
$you = new YOU;
honk() if $you->love(perl)