März 2011 Archive

Devel::Modlist von Randy J Ray ermittelt und zeigt die Module, die von einem Perl-Programm genutzt werden, übersichtlich an.

 

Verwendete Module auflisten

Devel::Modlist wird auf der Kommandozeile aufgerufen.

$ perl -d:Modlist Programm.pl

Angewandt auf ein einfaches Beispielprogramm

#!/usr/bin/perl
use strict;
use warnings;

use LWP;

liefert Devel::Modlist folgende Ausgabe auf STDERR:

AutoLoader             5.71
Carp                   1.17
Config                     
Config_git.pl              
Config_heavy.pl            
DynaLoader             1.10
Exporter             5.64_01
Exporter::Heavy      5.64_01
Fcntl                  1.06
File::Spec             3.33
File::Spec::Unix       3.33
FileHandle             2.02
HTTP::Date             6.00
HTTP::Headers         5.835
HTTP::Message         5.837
HTTP::Request         5.827
HTTP::Response        5.836
HTTP::Status          5.817
IO                   1.25_02
IO::File               1.14
IO::Handle             1.28
IO::Seekable            1.1
LWP                   5.837
LWP::MemberMixin           
LWP::Protocol         5.829
LWP::UserAgent        5.835
SelectSaver            1.02
Storable               2.25
Symbol                 1.07
Time::Local          1.2000
URI                    1.58
URI::Escape            3.30
XSLoader               0.10
constant               1.20
overload               1.10
vars                   1.01
warnings               1.09
warnings::register     1.01

 

Optionen

Über Optionen lässt sich das Verhalten von Devel::Modlist steuern. Die allgemeine Syntax:

 perl -d:Modlist=option1[,option2,...]

stdout

Diese Option schickt die Ausgabe von Devel::Modlist zur Standardausgabe STDOUT

$ perl -d:Modlist=stdout Programm.pl

nocore

Bei Verwendung dieser Option werden die verwendeten Core-Module nicht angezeigt:

$ perl -d:Modlist=stdout,nocore Programm.pl

Angewandt auf ein obiges Beispielprogramm, liefert Devel::Modlist folgende Ausgabe

HTTP::Date             6.00
HTTP::Headers         5.835
HTTP::Message         5.837
HTTP::Request         5.827
HTTP::Response        5.836
HTTP::Status          5.817
LWP                   5.837
LWP::MemberMixin           
LWP::Protocol         5.829
LWP::UserAgent        5.835
URI                    1.58
URI::Escape            3.30

 

cpan, cpandist

cpan reduziert die Liste auf Module, die über das Modul CPAN installiert wurden.

perl -d:Modlist=stdout,cpan Programm.pl

Angewandt auf ein obiges Beispielprogramm, liefert Devel::Modlist folgende Ausgabe

AutoLoader             5.71
Carp                   1.17
Config                     
Config_git.pl              
Config_heavy.pl            
Exporter             5.64_01
File::Spec             3.33
HTTP::Date             6.00
HTTP::Headers         5.835
IO                   1.25_02
LWP                   5.837
Storable               2.25
Time::Local          1.2000
URI                    1.58
XSLoader               0.10
constant               1.20

cpandist funktioniert wie cpan, gibt allerdings den Dateinamen statt des Modulnamen aus:

perl -d:Modlist=stdout,cpandist Programm.pl

Angewandt auf ein obiges Beispielprogramm, liefert Devel::Modlist folgende Ausgabe

S/SM/SMUELLER/AutoLoader-5.71.tar.gz
J/JE/JESSE/perl-5.13.9.tar.gz
Contact Author The Perl5 Porters Mailing List 
/opt/perl5.12.2/lib/5.12.2/i686-linux-thread-multi/Config_git.pl
/opt/perl5.12.2/lib/5.12.2/i686-linux-thread-multi/Config_heavy.pl
F/FE/FERREIRA/Exporter-5.63.tar.gz
S/SM/SMUELLER/PathTools-3.33.tar.gz
G/GA/GAAS/HTTP-Date-6.00.tar.gz
G/GA/GAAS/HTTP-Message-6.01.tar.gz
G/GB/GBARR/IO-1.25.tar.gz
G/GA/GAAS/libwww-perl-6.01.tar.gz
A/AM/AMS/Storable-2.25.tar.gz
F/FL/FLORA/Time-Local-1.2000.tar.gz
G/GA/GAAS/URI-1.58.tar.gz
S/SA/SAPER/XSLoader-0.10.tar.gz
S/SA/SAPER/constant-1.19.tar.gz

stop

Die Option stop lädt das Programm und führt es nicht aus. Die erst zur Laufzeit mit require oder eval geladenen Module können nicht ermittelt werden.

zerodefault, noversion

Falls die Versionsnummmer eines Moduls nicht ermittelt werden kann, setzt zerodefault diese einfach auf 0, noversion unterdrückt die Ausgabe der Versionnummern generell.

 

Siehe auch

Potenzmengen (engl. Powerset) lassen sich mit dem CPAN-Modul List::PowerSet von Nik Clayton einfach berechnen.

 

powerset() und powerset_lazy()

List::PowerSet stellt zwei Funktionen, powerset() und powerset_lazy(), bereit.

powerset()

powerset() nimmt eine Liste (Menge) entgegen und gibt eine Referenz auf eine Liste von Referenzen auf Arrays zurück - jede Array Referenz enthält eine Teilmenge.

Beispiel:

#!/usr/bin/perl 
use strict;
use warnings;

use List::PowerSet qw/powerset/;

my @input_list = qw/ x y z /;

my $powerset = powerset(@input_list);

foreach my $ps (@$powerset) {
    print "[ @$ps ]\n";
}

Das Programm erzeugt folgende Ausgabe:

[ x y z ]
[ y z ]
[ x z ]
[ z ]
[ x y ]
[ y ]
[ x ]
[  ]

powerset_lazy()

powerset_lazy() nimmt, wie powerset(), eine Liste entgegen und liefert eine Referenz auf eine Subroutine zurück, die als Iterator verwendet werden kann. Bei jedem Aufruf des Iterators wird eine weitere Teilmenge als Referenz auf einen Array zurückgegeben.

powerset_lazy() bietet sich vor allem bei umfangreichen Listen an. Im Gegensatz zu powerset() werden nicht alle Teilmengen auf ein Mal berechnet, sondern lazy evaluiert.

Beispiel:

#!/usr/bin/perl 
use strict;
use warnings;

use List::PowerSet qw/powerset_lazy/;

my @input_list = qw/ x y z /;

my $ps_iterator = powerset_lazy( @input_list );

while ( my $set = $ps_iterator->() ) {

    # $set is the next powerset entry
    print "[ @$set ]\n";
}

Das Programm erzeugt folgende Ausgabe:

[ x y z ]
[ y z ]
[ x z ]
[ z ]
[ x y ]
[ y ]
[ x ]
[  ]

 

Siehe auch

 

Über dieses Archiv

Diese Seite enthält alle Einträge von Perl HowTo von neu nach alt.

Februar 2011 ist das vorherige Archiv.

Mai 2011 ist das nächste Archiv.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Fachzeitschriften

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.