2010-08-16 27 views
5

Ngay bây giờ tôi có thể đặt tên cho printrout chương trình con như sau để có được kết xuất.Làm thế nào để đổ ops cho tất cả các chức năng bằng cách sử dụng B :: Concise

perl -MO=Concise,printargs,-main,-terse Hello.pl 

Giả sử tôi có một số chương trình con, làm cách nào để tạo mô-đun chung để kết xuất chi tiết cho tất cả các chương trình con?

+0

Đ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

Trả lời

4

Để đổ 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)->(); 
    } 
} 
+1

Ông có thể cung cấp một ví dụ làm việc đầy đủ cho các kịch bản bạn đã cho? Xin lỗi, những người mới chơi ở đây. [Giả sử tôi có một tập tin hello.pl, tôi nên làm gì đây?] –

Các vấn đề liên quan