use warnings; use strict; use Benchmark qw[ cmpthese ]; package Banana; sub new { my $class = shift; return bless({ @_ }, $class); } sub peel { my ($self) = @_; my $x; foreach (keys %$self) { $x += $self->{$_}; } $x; } package main; sub peel { my ($banana) = @_; my $x; foreach (keys %$banana) { $x += $banana->{$_}; } $x; } cmpthese(10_000,{ oo_peel => sub { my $banana = Banana->new( foo => 10, bar => 15); for (1..250) { $banana->peel(); } }, pr_peel => sub { my $banana = { foo => 10, bar => 15 }; for (1..250) { peel($banana); } }, });