403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /usr/share/doc/perl-Moose/benchmarks/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /usr/share/doc/perl-Moose/benchmarks/method_modifiers.pl
#!/usr/bin/perl

### MODULES

{
    package PlainParent;
    sub new { bless {} => shift }
    sub method { "P" }
}
{
    package MooseParent;
    use Moose;
    sub method { "P" }
}

{
    package CMMChild::Before;
    use Class::Method::Modifiers;
    use base 'PlainParent';

    before method => sub { "B" };
}
{
    package MooseBefore;
    use Moose;
    extends 'MooseParent';

    before method => sub { "B" };
}

{
    package CMMChild::Around;
    use Class::Method::Modifiers;
    use base 'PlainParent';

    around method => sub { shift->() . "A" };
}
{
    package MooseAround;
    use Moose;
    extends 'MooseParent';

    around method => sub { shift->() . "A" };
}

{
    package CMMChild::AllThree;
    use Class::Method::Modifiers;
    use base 'PlainParent';

    before method => sub { "B" };
    around method => sub { shift->() . "A" };
    after  method => sub { "Z" };
}
{
    package MooseAllThree;
    use Moose;
    extends 'MooseParent';

    before method => sub { "B" };
    around method => sub { shift->() . "A" };
    after  method => sub { "Z" };
}
{
    package CMM::Install;
    use Class::Method::Modifiers;
    use base 'PlainParent';
}
{
    package Moose::Install;
    use Moose;
    extends 'MooseParent';
}

use Benchmark qw(cmpthese);
use Benchmark ':hireswallclock';

my $rounds = -5;

my $cmm_before   = CMMChild::Before->new();
my $cmm_around   = CMMChild::Around->new();
my $cmm_allthree = CMMChild::AllThree->new();

my $moose_before   = MooseBefore->new();
my $moose_around   = MooseAround->new();
my $moose_allthree = MooseAllThree->new();

print "\nBEFORE\n";
cmpthese($rounds, {
    Moose                       => sub { $moose_before->method() },
    ClassMethodModifiers        => sub { $cmm_before->method() },
}, 'noc');

print "\nAROUND\n";
cmpthese($rounds, {
    Moose                       => sub { $moose_around->method() },
    ClassMethodModifiers        => sub { $cmm_around->method() },
}, 'noc');

print "\nALL THREE\n";
cmpthese($rounds, {
    Moose                       => sub { $moose_allthree->method() },
    ClassMethodModifiers        => sub { $cmm_allthree->method() },
}, 'noc');

print "\nINSTALL AROUND\n";
cmpthese($rounds, {
    Moose                       => sub {
        package Moose::Install;
        Moose::Install::around(method => sub {});
    },
    ClassMethodModifiers        => sub {
        package CMM::Install;
        CMM::Install::around(method => sub {});
    },
}, 'noc');

Youez - 2016 - github.com/yon3zu
LinuXploit