use strict;
use warnings;
package Test::Deep::MM;
sub import
{
my $self = shift;
my ($pkg) = caller();
my $mpkg = $pkg."::Methods";
foreach my $attr (@_)
{
if ($attr =~ /^[a-z]/)
{
no strict 'refs';
*{$mpkg."::$attr"} = \&{$attr};
}
else
{
my $get_name = $mpkg."::get$attr";
my $set_name = $mpkg."::set$attr";
my $get_sub = sub {
return $_[0]->{$attr};
};
my $set_sub = sub {
return $_[0]->{$attr} = $_[1];
};
{
no strict 'refs';
*$get_name = $get_sub;
*$set_name = $set_sub;
push(@{$pkg."::ISA"}, $mpkg);
}
}
}
}
sub new
{
my $pkg = shift;
my $self = bless {}, $pkg;
$self->init(@_);
return $self;
}
sub init
{
my $self = shift;
while (@_)
{
my $name = shift || confess("No name");
my $method = "set$name";
$self->$method(shift);
}
}
1;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez