#!/usr/bin/env perl
use strict;
use warnings;
use Benchmark qw<cmpthese>;
use lib 'blib/lib';
my $counter;
my @poultry = (qw<cock chick>);
sub Duck::quack { $counter += $_[0]->{id} * $_[0] }
sub fly { $counter += $_[0]; }
sub Duck::unshift { CORE::unshift @poultry, $_[0]->{id} * $_[3] }
sub Duck::pop { CORE::pop @poultry }
my $duck = bless { id => 0.7 }, 'Duck';
cmpthese -2, {
explicit => sub { $duck->quack(3); },
with => sub {
use with \$duck;
quack -3;
}
};
cmpthese -2, {
direct => sub { fly(2); },
deferred => sub {
use with \$duck;
fly -2;
}
};
cmpthese -2, {
core => sub { push @poultry, 1; shift @poultry; },
wrapped => sub {
use with \$duck;
push @poultry, 1; shift @poultry;
}
};
cmpthese -2, {
core => sub { unshift @poultry, $duck->{id} * 5; pop @poultry; },
flattened => sub {
use with \$duck;
unshift @poultry, -5; pop @poultry;
}
};