Just a couple of data points, as others have discussed the overall issues with XS, AUTOLOAD and the like. Neither will process argument lists, so they only address part of the question.
Devel::Symdump will give a huge amount of information about packages, but I prefer Class::Inspector these days as it is simpler to use.
use Devel::Symdump;
my $obj = Devel::Symdump->rnew( $package_name );
my @methods = $obj->functions();
# if you are sure private methods only start with underscore...
my @public_methods = grep {$_ !~ /^_/} @methods;
and
use Class::Inspector;
my $methods = Class::Inspector->methods( $package_name );
my $public_methods = Class::Inspector->methods( $package_name, 'public
+' );