my $boundary_aggregation_first = (
min => {
x => 0,
y => 0,
},
max => {
x => 639,
y => 479,
},
);
my $boundary_dimension_first = (
x => {
min => 0,
max => 639,
},
y => {
min => 0,
max => 479,
},
);
####
package Boundary;
use strictures 2;
use namespace::clean;
use Data::Dumper;
use Moo;
use MooX::Types::MooseLike::Base qw/ HashRef Int Maybe /;
with q{MooX::Singleton};
has q{limit} => (
is => q{rw},
isa => HashRef [ HashRef [ Maybe [Int] ] ],
traits => [ q{Hash}, ],
default => sub { {} },
);
####
before q{limit} => sub {
my $self = shift;
if ( scalar @_ ) {
my $val = shift;
if ( ref $val eq q{HASH} ) {
foreach my $k ( keys %{$val} ) {
if ( defined $val->{$k}->{$l} ) {
$self->limit->{$k}{$l} = $val->{$k}->{$l};
}
else {
my $result = $self->limit->{$k}{$l};
return $result;
}
}
}
}
};
__PACKAGE__->meta->make_immutable;
1;
package main;
my $wall = Boundary->instance();
$wall->limit( { min => { x => 0, y => 0, },
max => { x => 639, y => 478, }, }, );
# ...
say $wall->limit( { min => { x => undef, }, }, );
# Expected: 0
# Actual: HASH(0x801a440b8)
say $wall->limit( { max => { x => undef, }, }, );
# Expected: 639
# Actual: HASH(0x801a44160)
####
use strict;
use warnings;
use 5.014;
use Moo;
use strictures 2;
use namespace::clean;
package Boundary;
use Data::Dumper;
use Moo;
use MooX::Types::MooseLike::Base qw/ HashRef Int Maybe /;
with q{MooX::Singleton};
has 'limit' => (
is => q{rw},
isa => HashRef [ HashRef [ Maybe [Int] ] ],
traits => [ q{Hash}, ],
default => sub { {} },
);
before q{limit} => sub {
my $self = shift;
if ( scalar @_ == 1 ) {
my $val = shift;
if ( ref $val eq q{HASH} ) {
foreach my $k ( keys %{$val} ) {
foreach my $l ( keys %{ $val->{$k} } ) {
if ( defined $val->{$k}->{$l} ) {
$self->limit->{$k}{$l} =
$val->{$k}->{$l};
}
else {
my $result = $self->limit->{$k}{$l};
return $result;
}
}
}
}
}
};
__PACKAGE__->meta->make_immutable;
1;
package main;
# use Boundary;
my $wall = Boundary->instance();
$wall->limit(
{
min => { x => 0, y => 0, },
max => { x => 320, y => 240, },
},
);
say $wall->limit->{min}{x};
say $wall->limit->{min}{y};
say $wall->limit->{max}{x};
say $wall->limit->{max}{y};
# $wall->limit->{max}{x} = 325;
# $wall->limit->{max}{y} = 245;
say __LINE__ . q{: },
$wall->limit( { max => { x => 325, y => 245, }, }, );
say __LINE__ . q{: },
$wall->limit( { max => { q{x} => undef, }, }, );
say __LINE__ . q{: },
$wall->limit( { max => { q{y} => undef, }, }, );
# $wall->limit->{max}{x} = 320;
# $wall->limit->{max}{y} = 240;
$wall->limit( { max => { x => 320, y => 240, }, }, );
__END__