http://qs1969.pair.com?node_id=11141088


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:

  1. calling a code ref directly
  2. blessing a code ref and calling it directly
  3. 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

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->()} } );
Output:
Rate method blessed sub method 18939394/s -- -30% -39% blessed 27173913/s 43% -- -12% sub 30864198/s 63% 14% --