sub _setter_getter_maker { my $subname = shift; my $funcref; $funcref = eval<<"END"; sub { my(\$self, \$$subname) = \@_; \$self->{'$subname'} = \$$subname if defined \$$subname; return \$self->{'$subname'}; }; END return $funcref; } #### my $pretend_object = {}; my $new_func = _setter_getter_maker($pretend_object, 'attrib'); #Now we can set a value for 'attrib' in this object $new_func->('value');