Module::ScanDeps might help... (it's for example used by PAR)
Update: but note that when you're dealing with XS modules,
Module::ScanDeps won't determine secondary dependencies of shared
object files (at least I wouldn't know how...).
For example, lets say you're trying to track the dependencies of the
module GD, which has architecture-specific parts. In this case,
Module::ScanDeps will only tell you about the immediate shared object
file GD.so that's loaded by Dynaloader. However, GD.so in turn
depends on a multitude of other shared libs, like libgd, libpng,
libjpeg, libfreetype, libfontconfig, libexpat, etc.,
without which the GD.so shared object will not work... (Some of those libs may come with the default OS installation, but typically not all of them... Also, you'd have to make sure that versions are matching.)
In other words, if you want to get such a module working on another machine,
you'd have to take care of determining/packaging those dependencies yourself
(with the help of the appropriate system tool, like ldd on Linux).