use warnings; sub outer { my ($var) = @_; sub inner { print("$var\n"); } inner(); } outer("abc"); outer("def"); #### Variable "$var" will not stay shared at line 7. abc abc #### use Math::RungeKutta; sub outer { my $var = ...; local *dydt = sub { ... $var ... }; ... ($t, @y) = rkXXX(\@y, \&dydt, $t, $dt); ... } #### use Math::RungeKutta; sub outer { my $var = ...; my $dydt = sub { ... $var ... }; ... ($t, @y) = rkXXX(\@y, $dydt, $t, $dt); ... }