Skip to content

Instantly share code, notes, and snippets.

@azumakuniyuki
Created May 7, 2022 22:30
Show Gist options
  • Save azumakuniyuki/855c91d139391e27e43cbe0ed2cdeece to your computer and use it in GitHub Desktop.
Save azumakuniyuki/855c91d139391e27e43cbe0ed2cdeece to your computer and use it in GitHub Desktop.
How is faster The Postfix Dereference
#!/usr/bin/env perl
# @{ $neko->{'nyaan'} } vs. $neko->{'nyaan'}->@*
use strict;
use warnings;
use Benchmark ':all';
use Test::More 'no_plan';
my $neko1 = { 'nyaan' => \'2', 'cat' => [1..10] };
my $neko2 = { 'nyaan' => \'2', 'cat' => [1..10] };
sub prefix {
my $v = scalar keys %$neko1;
$v += scalar @{ $neko1->{'cat'} };
$v += int ${ $neko1->{'nyaan'} };
return $v;
}
sub postfix {
my $v = scalar keys $neko2->%*;
$v += scalar $neko2->{'cat'}->@*;
$v += int $neko2->{'nyaan'}->$*;
return $v;
}
is prefix(), 14;
is postfix(), 14;
printf("Running with Perl %s on %s\n%s\n", $^V, $^O, '-' x 80);
cmpthese(6e6, {
'@$neko' => sub { prefix() },
'$neko->@*' => sub { postfix() },
}
);
__END__
Running with Perl v5.32.0 on darwin
--------------------------------------------------------------------------------
Rate @$neko $neko->@*
@$neko 3773585/s -- -4%
$neko->@* 3947368/s 5% --
Running with Perl v5.30.0 on darwin
--------------------------------------------------------------------------------
Rate @$neko $neko->@*
@$neko 3636364/s -- -7%
$neko->@* 3896104/s 7% --
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment