use strict;
use warnings;
use Benchmark qw(cmpthese);
use MooseX::Declare;
use Method::Signatures::Modifiers;
sub array_ref {
my $args = \@_;
return $args->[0];
}
sub array_copy {
my ($first, $second, $third) = @_;
return $first;
}
sub shift_off {
my $first = shift;
my $second = shift;
my $third = shift;
return $first;
}
sub copy_once {
my @args = @_;
return $args[0];
}
sub copy_twice {
my @args = @_;
my $first = $args[0];
my $second = $args[1];
my $third = $args[2];
return $args[0];
}
sub named {
my %args = @_;
return $args{first};
}
sub named_copy {
my %args = @_;
my $first = $args{first};
my $second = $args{second};
my $third = $args{third};
return $first;
}
class Bench::Moose {
method moose(Int $first, Str $second, Any $third) {
return $first;
}
}
my @sample_args = (1, "foo bar baz", {a => 1, b => 2, c => [{i => 1, ii => 2, iii => 3}, 4, 5, 6]});
my $moose_obj = Bench::Moose->new;
cmpthese(
0,
{
array_ref => sub {array_ref(@sample_args);},
array_copy => sub {array_copy(@sample_args);},
shift_off => sub {shift_off(@sample_args);},
copy_once => sub {copy_once(@sample_args);},
copy_twice => sub {copy_twice(@sample_args);},
named => sub {named(first => $sample_args[0], second => $sample_args[1], third => $sample_args[2])},
named_copy => sub {named_copy(first => $sample_args[0], second => $sample_args[1], third => $sample_args[2])},
moose => sub {$moose_obj->moose(@sample_args);},
}
);
吼吼,自己试试看吧,看来我一直都是在用效率比较低的方式。