Devel::TraceUse von Philippe Bruhat (BooK) zeigt die Module, die von einem Perl-Programm genutzt werden, übersichtlich an.
Verwendete Module auflisten
Devel::TraceUse wird auf der Kommandozeile aufgerufen
$ perl -d:TraceUse your_program.pl
Devel::TraceUse erzeugt aus dem folgenden Beispielprogramm:
#!/usr/bin/perl use strict; use warnings; use DBI;
folgende Ausgabe:
Modules used from hierachy.pl: 1. strict 1.04, hierachy.pl line 2 [main] 2. warnings 1.09, hierachy.pl line 3 [main] 3. DBI 1.615, hierachy.pl line 5 [main] 4. Carp 1.17, DBI.pm line 159 5. Exporter 5.64_01, Carp.pm line 11 11. Exporter::Heavy 5.64_01, Exporter.pm line 16 6. DynaLoader 1.10, DBI.pm line 160 7. Config, DynaLoader.pm line 25 9. Config_heavy.pl, Config.pm line 70 10. Config_git.pl, Config_heavy.pl line 1224 [Config] 8. AutoLoader 5.70, DynaLoader.pm line 22 12. Scalar::Util 1.23, DBI.pm line 290 13. vars 1.01, Scalar/Util.pm line 10 14. warnings::register 1.01, vars.pm line 7 15. List::Util 1.23, Scalar/Util.pm line 12 16. XSLoader 0.10, List/Util.pm line 26
Die Ausgabe der Core-Module lässt sich über den Schalter =hidecore unterdrücken.
$ perl -d:TraceUse=hidcore your_program.pl
und erzeugt dann für o.g. Beispiel folgende Ausgabe:
Modules used from hierachy.pl: 3. DBI 1.615, hierachy.pl line 5 [main] 9. Config_heavy.pl, Config.pm line 70 10. Config_git.pl, Config_heavy.pl line 1224 [Config]
Visualisierung der verwendeten Module
Die Ausgabe von Devel::TraceUse lässt sich mittels eines einfachen Hacks mit GraphViz visualisieren.
#!/usr/bin/env perl use strict; use warnings; use GraphViz; ########################################################### # Works for me Software(TM) ########################################################### # Usage: # Step 1: # perl -d:TraceUse your-programm.pl 2> TraceUse.out.txt # or # perl -d:TraceUse=hidecore your-programm.pl 2> TraceUse.out.txt # Step2: # perl $0 TraceUse.out.txt ########################################################### # Based on http://use.perl.org/~BooK/journal/34717 ########################################################### #my $png = shift || 'use.png'; my $png = 'trace-use.png'; my $g = GraphViz->new( rankdir => 1 ); my @stack; while (<>) { # Do not graph standard pragmas next if m/warnings\s+\d+/; next if m/strict\s+\d+/; # Remove leading line numbers s/^\s+\d+\.//; # first node /^Modules used from (.*):/ && do { $g->add_node($1); @stack = ($1); }; # all other nodes /^((?: )+)(\S+).*,/ && do { my $idx = length($1) / 2; $stack[$idx] = $2; $g->add_node($2); $g->add_edge( $stack[ $idx - 1 ] => $2 ); }; # ignore all other lines } $g->as_png($png);
Das Programm erzeugt mit o.g. Beispiel folgende Graphik:
Siehe auch
- CPAN: Devel::TraceUse
- CPAN: GraphViz
- Journal of BooK: Graphing module usage
- CPAN: Module::ScanDeps