summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2010-03-01 01:54:19 +0000
committerNorbert Preining <preining@logic.at>2010-03-01 01:54:19 +0000
commit904fd0757fe037dbfbf156b31f72e5ff5c7cd796 (patch)
tree36f000ab754854574aad17c01d9cd9ac739f1053 /Master/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm
parent402bd194f686177d2dfca24f7c4766434c514141 (diff)
commit more files of the tlperl.straw dir, still not complete
git-svn-id: svn://tug.org/texlive/trunk@17244 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm')
-rwxr-xr-xMaster/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm64
1 files changed, 64 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm b/Master/tlpkg/tlperl.straw/lib/Test/Deep/MM.pm
new file mode 100755
index 00000000000..982b8510857
--- /dev/null
+++ b/Master/tlpkg/tlperl.straw/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;