http://qs321.pair.com?node_id=452293


in reply to Is there a module which Perl has to load when using any module?

This is a question prompted by What modules are we actually using?. I was wondering if there is some core Perl module which has to be loaded, when it loads another module thru use or require? My idea would be to temporarily modify that module, to print to a log file.
What does that "it" refer to? Perl? If so, then I don't think so. Otherwise, unless I'm severely mistaken, I don't think so either.

However if all you want is to {know,log} which modules get loaded, then you can easily spot the possibility to put code into @INC to do so. E.g.:

#!/usr/bin/perl -l use strict; use warnings; END { my @stuff; sub record { push @stuff, $_[1]; undef; } print for @stuff; } use lib \&record; use File::Find; no lib \&record; # Do something else, I suppose! __END__
For the record this had come up in clpmisc and this kind of solution was suggested by Anno Siegel, who is a precious contributor there. As time permits I'll try to locate the original post.

Replies are listed 'Best First'.
Re^2: Is there a module which Perl has to load when using any module?
by merlyn (Sage) on Apr 28, 2005 at 15:53 UTC
      Indeed. Of course the original discussion was about how to monitor module loading on a "per use statement basis", as can be suggested by the minimal example supplied - still sloppily speaking here, but I guess it's easy to understand what I really mean here.

      But then again it was just an example of how to use a coderef in @INC to achieve something similar to what the OP wanted...

      Brilliant. Can I suggest sorting for readability:
      END { print STDERR "Modules used:\n", map { " $_\n" } sort values %INC; }