my $codified = 0;
{
- package Dark::Side;
- use overload
- q[&{}] => sub { $codified++; shift->to_code },
- fallback => 1;
- sub new {
- my $class = shift;
- my $code = shift;
- bless \$code, $class;
- }
- sub to_code {
- my $self = shift;
- eval "sub { $$self }";
- }
+ package Dark::Side;
+ use overload
+ q[&{}] => sub { $codified++; shift->to_code },
+ fallback => 1;
+ sub new {
+ my $class = shift;
+ my $code = shift;
+ bless \$code, $class;
+ }
+ sub to_code {
+ my $self = shift;
+ eval "sub { $$self }";
+ }
}
{
- package The::Force;
- use Sub::Quote;
- use base 'Dark::Side';
- sub to_code {
- my $self = shift;
- return quote_sub $$self;
- }
+ package The::Force;
+ use Sub::Quote;
+ use base 'Dark::Side';
+ sub to_code {
+ my $self = shift;
+ return quote_sub $$self;
+ }
}
my $darkside = Dark::Side->new('my $dummy = "join the dark side"; $_[0] * 2');
my $luke = The::Force->new('my $z = "I am your father"');
{
- package Doubleena;
- use Moo;
- has a => (is => "rw", coerce => $darkside, isa => sub { 1 });
- has b => (is => "rw", coerce => $theforce, isa => $luke);
+ package Doubleena;
+ use Moo;
+ has a => (is => "rw", coerce => $darkside, isa => sub { 1 });
+ has b => (is => "rw", coerce => $theforce, isa => $luke);
}
my $o = Doubleena->new(a => 11, b => 12);
require Scalar::Util;
is(
- Scalar::Util::refaddr($luke),
- Scalar::Util::refaddr(
- Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"isa"}
- ),
- '$spec->{isa} reference is not mutated',
+ Scalar::Util::refaddr($luke),
+ Scalar::Util::refaddr(
+ Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"isa"}
+ ),
+ '$spec->{isa} reference is not mutated',
);
is(
- Scalar::Util::refaddr($theforce),
- Scalar::Util::refaddr(
- Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"coerce"}
- ),
- '$spec->{coerce} reference is not mutated',
+ Scalar::Util::refaddr($theforce),
+ Scalar::Util::refaddr(
+ Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"coerce"}
+ ),
+ '$spec->{coerce} reference is not mutated',
);
done_testing;