subtype USZipCodeA
=> as Value
=> where {
/^$RE{zip}{US}{-extended => 'allow'}$/
};
####
my $zip_re = qr/^$RE{zip}{US}{-extended => 'allow'}$/;
subtype USZipCodeB
=> as Value
=> where {
$_ =~ $zip_re;
};
####
package AddressA;
use Moose;
use Moose::Util::TypeConstraints;
use Regexp::Common 'zip';
subtype USZipCodeA
=> as Value
=> where {
/^$RE{zip}{US}{-extended => 'allow'}$/
};
has 'zip_code' => (is => 'rw', isa => 'USZipCodeA');
1;
####
package AddressB;
use Moose;
use Moose::Util::TypeConstraints;
use Regexp::Common 'zip';
my $zip_re = qr/^$RE{zip}{US}{-extended => 'allow'}$/;
subtype USZipCodeB
=> as Value
=> where {
$_ =~ $zip_re;
};
has 'zip_code' => (is => 'rw', isa => 'USZipCodeB');
1;
####
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(cmpthese);
use AddressA;
use AddressB;
my $zip = 12345;
cmpthese (-5,
{
A => sub { AddressA->new(zip_code => $zip);},
B => sub { AddressB->new(zip_code => $zip);}
}
);
exit;
####
Rate A B
A 2976/s -- -43%
B 5187/s 74% --
####
Regexp::Common::_decache
Regexp::Common::new
####
Class::MOP::Instance::new
Class::MOP::Instance::set_slot_value
####
Rate A B
A 2955/s -- -7%
B 3174/s 7% --