sub purse { my $balance = shift; my $coderef; $coderef = sub { my($who, $qty) = @_; print "Paying $who $qty\n" if ($balance - $qty) >= 0; undef $coderef if $balance <= 0 }; # Return a reference to your code reference. \ $coderef; } { my $$payment = purse(10); for ([qw/mom 7/], [qw/dad 3/], [qw/myself 1/]) { $$payment->(@$_) if $$payment; } }