use strict; use warnings; use Benchmark qw( cmpthese ); sub pass_ref { my ($a) = @_; my $x = ''; $x .= $_ for @$a; 1; } sub pass_list { my @a = @_; my $x = ''; $x .= $_ for @a; 1; } sub pass_list_no_copy { my $x = ''; $x .= $_ for @_; 1; } my %tests = ( ref => 'pass_ref(\@a);', list => 'pass_list(@a);', list_nc => 'pass_list_no_copy(@a);', ); $_ = 'use strict; use warnings; our @a; ' . $_ for values(%tests); our @a = ('-') x ( $ARGV[0] || 10 ); cmpthese(-1, \%tests);