1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#!/usr/bin/perl
use v5.18;
use warnings;
use Test2::V0;
use Object::Pad::MOP::Class ':experimental(mop)';
# An attempt to programmatically generate everything
{
my $classmeta = Object::Pad::MOP::Class->create_class( "Point" );
my $xfieldmeta = $classmeta->add_field( '$x', reader => 'x' );
my $yfieldmeta = $classmeta->add_field( '$y', reader => 'y' );
$classmeta->add_BUILD( sub {
my $self = shift;
my ( $x, $y ) = @_;
$xfieldmeta->value($self) = $x;
$yfieldmeta->value($self) = $y;
} );
$classmeta->add_method( describe => sub {
my $self = shift;
return sprintf "Point(%d, %d)",
$xfieldmeta->value($self), $yfieldmeta->value($self);
} );
$classmeta->seal;
}
{
my $point = Point->new( 10, 20 );
is( $point->describe, "Point(10, 20)",
'$point->describe' );
is( $point->x, 10, '$point->x' );
}
done_testing;
|