sub foo { my ( $arg ) = @_ ; my $bar = sub { print "ARG[$arg]\n" ; return "RE[$arg]" ; } ; return $bar ; } my $bar1 = foo(123) ; my $bar2 = foo(456) ; my $foo1 = &$bar1() ; my $foo2 = &$bar2() ; print "foo1: $foo1\n" ; print "foo2: $foo2\n" ; #### ARG[123] ARG[456] foo1: RE[123] foo2: RE[456] #### my $e = 10 ; my $sub = eval(" sub { return 2**$e } ") ; #### sub foo { print "foo\n" ;} # now redefining it: *foo = sub { print "bar\n" ;}