Skip to content

Instantly share code, notes, and snippets.

@lbe
Created February 21, 2022 04:28
Show Gist options
  • Save lbe/fae918ee6ffdd265ee5b2a78f17ab6da to your computer and use it in GitHub Desktop.
Save lbe/fae918ee6ffdd265ee5b2a78f17ab6da to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
#
use strict;
use warnings;
use feature 'signatures';
no warnings 'experimental::signatures';
use Benchmark qw( cmpthese );
my $first = 1;
my $second = 2;
my @ar = ( 1, 2 );
my $d = { first => 1, second => 2 };
cmpthese(
100_000_000,
{
'_array_direct' => sub { _array_direct( @ar ) },
'_array_shift' => sub { _array_shift( @ar ) },
'_array_unpack' => sub { _array_unpack( @ar ) },
'_ref_direct' => sub { _ref_direct($d) },
'_ref_shift' => sub { _ref_shift($d) },
'_ref_unpack' => sub { _ref_unpack($d) },
'_signatures_array' => sub { _signatures_array( @ar ) },
'_signatures_scalar' => sub { _signatures_scalar( $first, $second ) },
'_signatures_ref' => sub { _signatures_ref($d) },
}
);
sub _array_direct {
return $_[0], $_[1];
}
sub _array_shift {
my $first = shift;
my $second = shift;
return $first, $second;
}
sub _array_unpack {
my ( $first, $second ) = @_;
return $first, $second;
}
sub _ref_direct {
return $_[0]->{first}, $_[0]->{second};
}
sub _ref_shift {
my ($_d) = shift;
return $d->{first}, $d->{second};
}
sub _ref_unpack {
my ($_d) = @_;
return $d->{first}, $d->{second};
}
sub _signatures_array (@_ar) {
return $_ar[0], $_ar[1];
}
sub _signatures_scalar ( $first, $second ) {
return $first, $second;
}
sub _signatures_ref ($_d) {
return $_d->{first}, $_d->{second};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment