{ my $foo = "Foo!\n"; sub makefoo { *foo = sub { print $foo }; $foo; } } makefoo(); foo(); #### { my $foo = "Foo!\n"; sub makefoo { *foo = sub { print $foo }; } } makefoo(); foo(); #### { my $foo = "Foo!\n"; *makefoo = sub { *foo = sub { print $foo }; } } makefoo(); foo(); #### my $foo = "Foo!\n"; sub makefoo { *foo = sub { print $foo }; } makefoo(); foo(); #### my $foo = "Foo!\n"; sub makefoo { *foo = sub { print $foo }; } $foo = "Moo!\n"; makefoo(); foo();