use Math::RungeKutta; sub outer { my $var = sub_from_other_package(); no warnings qw(closure); sub differ { my $y = shift; $var->[...]{...}{...}; etc. ... return $res; } sub dydt { my ($t,@y) = @_; return differ($y); }; ($t, @y) = rkXXX(\@y, \&dydt, $t, $dt); }