Well sure, doing more work takes more time. If you let Perl do the iteration, the difference between dereferencing and aliasing is benchmarking noise (and the difference between manual iteration and internal iteration saves you even more time):
use Modern::Perl; use Benchmark qw[ cmpthese ]; sub deref { my $r = shift; ++$r->[$_][1] for 0..$#$r; } sub alias { our @a; local *a = shift; ++$a[$_][1] for 0 .. $#a } sub deref_iter { my $r = shift; $_->[1]++ for @$r; } sub alias_iter { our @a; local *a = shift; $_->[1]++ for @a; } my @a = map[1..3],1..1e6; cmpthese -1, { deref => sub { deref( \@a ) }, alias => sub { alias( \@a ) }, deref_iter => sub { deref_iter( \@a ) }, alias_iter => sub { alias_iter( \@a ) }, };
In reply to Re^6: when to use lists/hash vs references?
by chromatic
in thread when to use lists/hash vs references?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |