use strict; use warnings; local *f1 = make_adder( 20); printf "result f1 = %d\n", f1(10); local *f2 = make_adder(555); printf "result f2 = %d\n", f2(10); sub make_adder { my $addpiece = shift; print "\$addpiece = $addpiece\n"; *inner = sub { return shift() + $addpiece; }; return *inner; }