use strict; use Benchmark; my @x = (0..100_000); sub pass_by_value(@) { my $x; foreach (@_) { $x += $_ } return $x } sub pass_by_reference(\@) { my $x; foreach (@$_) { $x += $_ } return $x } timethese(500, { 'Pass by Ref' => sub { pass_by_reference(@x) }, 'Pass by Value' => sub { pass_by_value(@x) } }); sub return_by_value(@) { return @x }; sub return_by_reference(\@) { return \@x }; timethese(500, { 'Return by Ref' => sub { return_by_reference(@x) }, 'Return by Value' => sub { return_by_value(@x) } });