use warnings; use 5.010; for my $num (1 .. 5) { my $a = $num; {say "in block: $a"}; *test = sub { say "in function: $a"; }; test() } __END__ c:\test>junk11 in block: 1 in function: 1 in block: 2 Subroutine main::test redefined at C:\test\junk11.pl line 11. in function: 2 in block: 3 Subroutine main::test redefined at C:\test\junk11.pl line 11. in function: 3 in block: 4 Subroutine main::test redefined at C:\test\junk11.pl line 11. in function: 4 in block: 5 Subroutine main::test redefined at C:\test\junk11.pl line 11. in function: 5