Để đổ một chương trình con duy nhất bạn có thể sử dụng
B::Concise::compile($sub)->()
nơi $ sub là tham chiếu đến một tiểu.
Nếu bạn biết danh sách người đăng ký trước, bạn đã hoàn tất, chỉ cần thực hiện ở trên cho mỗi người trong số họ.
Nếu không, để có được danh sách các tên chương trình con hiện trong một gói cụ thể, bạn luôn có thể đi bộ bảng biểu tượng cho gói:
no strict 'refs';
for my $k (keys %{"$pkgname\::"}) {
if (*{${"$pkgname\::"}{$k}}{CODE}) {
print "$k\n"; # sub name
}
}
Cập nhật: dòng đầu tiên của tôi chứa đựng một sai lầm, đó là cố định ngay bây giờ. Và đây là ví dụ kịch bản hoàn chỉnh:
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)->();
}
}
Điều quan trọng là đánh vần "ngắn gọn" với số vốn "C", cũng như (bây giờ tôi thấy - nhờ) – Roboprog