package TEST; use strict; ############################################## # # A generic object with fields specified # at creation time. # ############################################## my %data; sub new { my $self = bless [], shift; my @required_fields = @_; foreach my $field (@required_fields) { chomp $field; my $eval = "sub $field : lvalue { \$data{+shift}->{$field}; }"; eval $eval; } return $self; } sub DESTROY { delete $data{+shift}; } 1; #### my $test = new TEST qw( foo bar baz ); $test->foo = 3; $test->bar = "Boy is this a messed-up object!"; $test->baz = "I bet someone else has a better way to do this.";