diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Test/Deep/MM.pm')
-rwxr-xr-x | Master/tlpkg/tlperl/lib/Test/Deep/MM.pm | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Test/Deep/MM.pm b/Master/tlpkg/tlperl/lib/Test/Deep/MM.pm new file mode 100755 index 00000000000..982b8510857 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/Test/Deep/MM.pm @@ -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; |