my %Vals; for ( qw(foo bar) ) { my $method = shift; *$method = sub { my $self = shift; my $old = $Vals{$method}{$self}; $Vals{$method}{$self} = @_ ? $_[0] : (); return $old; }; } #### sub DESTROY { my $self = shift; delete $_->{$self} for values %Vals; return; }