オブジェクト指向とMooseとClass::Accesser
package Class;
sub new {
my $class = shift;
my $self = {X => shift, Y => shift,};
return bless $self, $class;
}
sub x {
my $self = shift;
if (@_) {
$self->{'X'} = @_[0];
}
return $self->{'X'};
}
sub y {
my $self = shift;
if (@_) {
$self->{'Y'} = @_[0];
}
return $self->{'Y'};
}
1;
package Main;
my $o = Class->new(20);
print $o->x() . "/" . $o->y() . "\n"; # 20/
$o = Class->new(40, 50);
print $o->x() . "/" . $o->y() . "\n"; # 40/50
$o->x(300);
print $o->x() . "/" . $o->y() . "\n"; # 300/50
package Class;
use Moose;
has X => (is => 'rw', isa => 'Int', default => 0);
has Y => (is => 'rw', isa => 'Int', default => 0);
1;
package Main;
my $o = Class->new(X => 20);
print $o->X() . "/" . $o->Y() . "\n"; # 20/0
$o = Class->new(X => 40, Y => 50);
print $o->X() . "/" . $o->Y() . "\n"; # 40/50
$o->X(300);
print $o->X() . "/" . $o->Y() . "\n"; # 300/50
package Class;
use base qw(Class::Accessor);
__PACKAGE__->mk_accessors(qw(X Y));
1;
package Main;
my $o = Class->new({X => 20});
print $o->X() . "/" . $o->Y() . "\n"; # 20/
$o = Class->new({X => 40, Y => 50});
print $o->X() . "/" . $o->Y() . "\n"; # 40/50
$o->X(300);
print $o->X() . "/" . $o->Y() . "\n"; # 300/50