Initial Commit
This commit is contained in:
64
database/perl/lib/Test/Deep/MM.pm
Normal file
64
database/perl/lib/Test/Deep/MM.pm
Normal file
@@ -0,0 +1,64 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user