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