in reply to Re^5: How to identify the package of a subroutine given only a reference to it
in thread How to identify the package of a subroutine given only a reference to it
My question wasn't very directional... I was wanting to know the relative performance of a blessed code ref vs a unblessed code ref
So I put together a little benchmark comparing:
- calling a code ref directly
- blessing a code ref and calling it directly
- blessing a code ref and calling another method in the object
Blessing the code ref does have a performance impact when using it as a code ref compared to an unblessed code ref. However it is cheap compared to calling a method on the object
Output:use strict; use warnings; use feature ":all"; use Benchmark qw<cmpthese>; my $count=$ARGV[0]//1; package SUB_TEST { sub new { bless sub {1}, __PACKAGE__} sub method { 1 } } my $obj=SUB_TEST->new(); my $sub=sub {1}; cmpthese($count, { blessed=>sub {$obj->()}, method=>sub{$obj->method()}, sub=>sub{$sub->()} } );
Rate method blessed sub method 18939394/s -- -30% -39% blessed 27173913/s 43% -- -12% sub 30864198/s 63% 14% --
In Section
Seekers of Perl Wisdom