読者です 読者をやめる 読者になる 読者になる

Perl - アクセッサ

sub field { shift->{field} }
sub field { $_[0]->{field} }

のどちらの方が速いのかはかってみたら、 shift の方が速かった。完全に逆だと思ってた。

#!/usr/bin/env perl
use strict;
use warnings;

use Benchmark qw(cmpthese);

package Dummy {
    sub new {
        my $class = shift;
        bless { field => "value" }, $class;
    }
    sub _shift {
        shift->{field};
    }
    sub _arg {
        $_[0]->{field};
    }
}

my $d1 = Dummy->new;
my $d2 = Dummy->new;

cmpthese 0, {
    'shift' => sub { $d1->_shift },
    '$_[0]' => sub { $d2->_arg   },
};

__END__
           Rate $_[0] shift
$_[0] 3185777/s    --  -14%
shift 3709584/s   16%    --