关于子函数参数传递的效率问题

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);},
    }
);

吼吼,自己试试看吧,看来我一直都是在用效率比较低的方式。

转载于:https://my.oschina.net/OliverTwist/blog/225304

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值