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 : |
#!/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');