Для выгрузки одной подпрограммы вы можете использовать
B::Concise::compile($sub)->()
где $ sub - ссылка на sub.
Если вы заранее знаете список сабов,
Вы сделали, просто сделайте выше для каждого из них.
В противном случае, чтобы получить список существующих имен подпрограмм
в конкретной упаковке вы всегда можете пройтись по символу
таблица для этой упаковки:
no strict 'refs';
for my $k (keys %{"$pkgname\::"}) {
if (*{${"$pkgname\::"}{$k}}{CODE}) {
print "$k\n"; # sub name
}
}
Обновление: моя первая строка содержала ошибку, которая исправлена
сейчас. А вот полный пример скрипта:
package Blah;
sub x { return "x"; }
sub hehe { print 2*2, "\n"; }
sub meme { die "ouch" }
our $varvar; # to illustrate the {CODE} thingy
package main;
use warnings;
use strict;
use B::Concise;
my $pkgname = "Blah";
no strict 'refs';
for my $k (keys %{"$pkgname\::"}) {
if (*{${"$pkgname\::"}{$k}}{CODE}) {
my $sub = \&{${"$pkgname\::"}{$k}};
print "Dump of $pkgname\::$k():\n";
B::Concise::compile($sub)->();
}
}