summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Test/Deep/MM.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Test/Deep/MM.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Test/Deep/MM.pm64
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;