Practice of Programming

プログラム とか Linuxとかの話題

compare Sub::Install/Data::Util/ExportTo for installing subroutine

To install subroutine, you can use Data::Util, Sub::Install or ExportTo.

                 Rate  sub_install    export_to data_util_pp    data_util
sub_install   17980/s           --         -65%         -83%         -90%
export_to     51200/s         185%           --         -50%         -71%
data_util_pp 103357/s         475%         102%           --         -42%
data_util    177535/s         887%         247%          72%           --

Code.

#!/usr/bin/perl

use strict;
use warnings;
use Util::All -benchmark;
use Data::Util qw/install_subroutine/;
use Sub::Install;
use ExportTo;

sub hello  {"Hello!\n"}
sub goodby {"Goodby!\n"}

my $i = 0 ;
cmpthese(-1,
         {
             data_util =>
                 sub {
                     my $class = 'Foo' . $i++;
                     install_subroutine($class, hello  => \&hello, goodby => \&goodby);
             },
             data_util_pp =>
                 sub {
                     my $class = 'Foo' . $i++;
                     local $ENV{DATA_UTIL_PUREPERL} = 1;
                     install_subroutine($class, hello  => \&hello, goodby => \&goodby);
             },
             export_to =>
                 sub {
                     my $class = "Foo" . $i++;
                     export_to($class => {hello  => \&hello, goodby => \&goodby});
             },
             sub_install => sub {
                 my $class = "Foo" . $i++;
                 Sub::Install::install_sub({code => \&hello, into => $class, as   => "hello"});
                 Sub::Install::install_sub({code => \&goodby, into => $class, as   => "goodby"});
             }
         }
    );