package Foo { sub new { bless { foo => 'bar', baz => 'quux', }; } sub get_foo { $_[0]->{foo}; } sub get_baz { $_[0]->{baz}; } } sub with (&$@) { my $code = shift; my $obj = shift; map { my $meth = $_; local $_ = $obj->$meth; $code->(); } @_; } my $obj = Foo->new; my @methods = qw(get_foo get_baz); with { print "val: $_\n"; } $obj, @methods;