1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
#!/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 => {},
);
},
}
);
|