package something; sub new{ bless {}, __PACKAGE__ } sub doit ($&$) { local $_ = $_[0]->{ $_[2] }; $_[1]->(); } ... package main; my $o = something->new; $o->doit{ $_ += 1 }, 'fred';