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 use strict; use warnings; use Benchmark qw[cmpthese]; use Moose::Util::TypeConstraints; { package Foo; use Moose; Foo->meta->make_immutable(debug => 0); } coerce 'Foo' => from 'ArrayRef' => via { Foo->new(@{$_}) }; { package Foo::Normal; use Moose; has 'default' => (is => 'rw', default => 10); has 'default_sub' => (is => 'rw', default => sub { [] }); has 'lazy' => (is => 'rw', default => 10, lazy => 1); has 'required' => (is => 'rw', required => 1); has 'weak_ref' => (is => 'rw', weak_ref => 1); has 'type_constraint' => (is => 'rw', isa => 'Foo'); has 'coercion' => (is => 'rw', isa => 'Foo', coerce => 1); package Bar::Normal; use Moose; extends 'Foo::Normal'; has 'default_w_type_constraint' => ( is => 'rw', isa => 'Int', default => 10, ); } { package Foo::Immutable; use Moose; has 'default' => (is => 'rw', default => 10); has 'default_sub' => (is => 'rw', default => sub { [] }); has 'lazy' => (is => 'rw', default => 10, lazy => 1); has 'required' => (is => 'rw', required => 1); has 'weak_ref' => (is => 'rw', weak_ref => 1); has 'type_constraint' => (is => 'rw', isa => 'Foo'); has 'coercion' => (is => 'rw', isa => 'Foo', coerce => 1); #sub BUILD { # # ... #} Foo::Immutable->meta->make_immutable(debug => 0); package Bar::Immutable; use Moose; extends 'Foo::Immutable'; has 'default_w_type_constraint' => ( is => 'rw', isa => 'Int', default => 10, ); Bar::Immutable->meta->make_immutable(debug => 0); } #__END__ my $foo = Foo->new; cmpthese(10_000, { 'normal' => sub { Foo::Normal->new( required => 'BAR', type_constraint => $foo, coercion => [], weak_ref => {}, ); }, 'immutable' => sub { Foo::Immutable->new( required => 'BAR', type_constraint => $foo, coercion => [], weak_ref => {}, ); }, } );