The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

# Loaded.pm -- show what files were loaded
package Devel::Loaded;
# ABSTRACT: pmtools - Perl Module Tools
# ------ pragmas
use strict;
our $VERSION = '2.2.0';
# ----- define variable
my $path = undef; # current module path
our %Seen = (); # track whether we've seen this module before
BEGIN {
%Seen = %INC;
sub DB::DB { 1 }
}
END {
# get last part of Devel::Loaded path; handle File::Spec->canonpath() removing '.' from '.pm'
my $devel_loaded = File::Spec->catfile('Devel', 'Loaded.pm');
if ($devel_loaded =~ m/Loadedpm$/) {
$devel_loaded =~ s/Loadedpm$/Loaded.pm/;
}
# delete the matching absolute path from %INC
# NOTE: this will fail if you also have directories like ".../MyOwnDevel/Loaded.pm"
my $inc_devel_loaded = "";
foreach $path (keys(%INC)) {
if ($path =~ m/$devel_loaded$/) {
$inc_devel_loaded = $path;
last;
}
}
if ($inc_devel_loaded ne "") {
#delete $INC{$inc_devel_loaded};
}
for my $path (values %INC) {
print "$path\n" unless $Seen{$path};
}
}
1;
__END__
=head1 NAME
Devel::Loaded - Post-execution dump of loaded modules
=head1 SYNOPSIS
perl -MDevel::Loaded programname 2>/dev/null
=head1 DESCRIPTION
The Devel::Loaded module installs an at-exit handler to generate a dump of
all the module files used by a Perl program. If used in conjunction with
a I<perl -c>, you find those files loaded in at compile time with C<use>.
If you are willing to wait until after the program runs, you can get
them all.
=head1 EXAMPLES
This is compile-time only:
$ perl -MDevel::Loaded perldoc 2>/dev/null
/usr/local/devperl/lib/5.00554/Exporter.pm
/usr/local/devperl/lib/5.00554/strict.pm
/usr/local/devperl/lib/5.00554/vars.pm
/usr/local/devperl/lib/5.00554/i686-linux/Config.pm
/usr/local/devperl/lib/5.00554/Getopt/Std.pm
This will also catch run-time loads:
#!/usr/bin/perl
use Devel::Loaded;
...
=head1 SEE ALSO
The I<plxload> and the I<pmload> programs, which use
this technique.
Neil Bowers has written a L<review|http://neilb.org/reviews/dependencies.html> of
Perl modules for getting dependency information (26 of them at the time of writing).
=head1 AUTHORS and COPYRIGHTS
Copyright (C) 1999 Tom Christiansen.
Copyright (C) 2006-2014, 2018 Mark Leighton Fisher.
=head1 LICENSE
This is free software; you can redistribute it and/or modify it
under the terms of either:
(a) the GNU General Public License as published by the Free
Software Foundation; either version 1, or (at your option) any
later version, or
(b) the Perl "Artistic License".
(This is the Perl 5 licensing scheme.)
Please note this is a change from the
original pmtools-1.00 (still available on CPAN),
as pmtools-1.00 were licensed only under the
Perl "Artistic License".