in reply to Pretending to be lisp: macros

I think you want the even lispier idea of closures:
sub _setter_getter_maker { my($self,$subname) = @_; return sub { my($val)=@_; $self->{$subname} = $val if defined $val; return $self->{$subname}; } } 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'); print $pretend_object->{'attrib'},"\n";