##
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;
}
####
$ perl func_template2.pl
$addpiece = 20
result f1 = 30
$addpiece = 555
Subroutine main::inner redefined at func_template2.pl line 15.
result f2 = 565