2010-08-16 5 views
5

Dumps für alle Funktionen dump Ich kann jetzt die Subroutine printargs wie folgt benennen, um den Dump zu erhalten.Wie man ops für alle Funktionen mit B :: Concise

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

Angenommen, ich mehrere Funktionen haben, wie kann ich ein generisches Modul bauen für alle Subroutinen dump Details?

+0

Es ist wichtig, „Concise“ mit einem großen „C“ zu buchstabieren, wie gut (ich sehe jetzt - dank) – Roboprog

Antwort

4

Um ein einzelnes Unterprogramm-Dump Sie

B::Concise::compile($sub)->() 

wobei $ Unter der Verweis auf eine Unter ist verwenden können.

Wenn Sie die Liste der U-Boote im Voraus kennen, Sie sind fertig, tun Sie einfach das obige für jeden von ihnen.

Andernfalls wird die Liste der vorhandenen Subroutinennamen zu erhalten in einem bestimmten Paket, können Sie immer den für das Paket Symbol Tisch gehen:

no strict 'refs'; 
for my $k (keys %{"$pkgname\::"}) { 
    if (*{${"$pkgname\::"}{$k}}{CODE}) { 
     print "$k\n"; # sub name 
    } 
} 

Update: meine erste Zeile enthielt einen Fehler, das ist behoben jetzt. Und hier ist das komplette Beispielskript:

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

Könnten Sie bieten ein vollständiges Arbeitsbeispiel für den Skript Sie gab? Entschuldigung, Perl Neuling hier. [Angenommen, ich habe eine Datei hello.pl, was soll ich tun]? –

Verwandte Themen