Skip to content

Instantly share code, notes, and snippets.

@j1n3l0
Last active October 17, 2019 21:16
Show Gist options
  • Save j1n3l0/8fb2a2ea22ef44e7892d122e186f6817 to your computer and use it in GitHub Desktop.
Save j1n3l0/8fb2a2ea22ef44e7892d122e186f6817 to your computer and use it in GitHub Desktop.
package Point;
use Data::Dumper::Concise qw< Dumper >;
use Scalar::Util qw< refaddr >;
my %x;
my %y;
use overload '""' => sub {
my $self = shift;
Dumper +{
x => $x{refaddr $self},
y => $y{refaddr $self},
};
};
sub new {
my ($class, $args) = @_;
my $self = bless \do{my $anon_scalar}, $class;
$x{refaddr $self} = $args->{x} || 0;
$y{refaddr $self} = $args->{y} || 0;
return $self;
}
sub DESTROY {
my $self = shift;
delete $x{refaddr $self};
delete $y{refaddr $self};
}
1;
use Test2::V0 -target => 'Point';
use Data::Dumper::Concise qw< Dumper >;
subtest $CLASS => sub {
subtest 'string overloading' => sub {
is(
sprintf( '%s', $CLASS->new ),
Dumper({ x => 0, y => 0 }),
'should be a Data::Dumper representation',
);
};
};
done_testing;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment