in reply to Re: Re: Why is split faster than anonymous arrays?
in thread Why is split faster than anonymous arrays?
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)
|
|---|