http://www.perlmonks.org?node_id=343019


in reply to Re: Search @INC And Display Modules
in thread Search @INC And Display Modules

You can get rid of that humongous hash def and deal with different perl versions by using Module::CoreList

Actually, I tried that, and ran into a couple of problems with it:

  1. Module::CoreList is not installed by default on all systems. This would mean I would either have to include it in my code or have people download and install it -- which makes it less of the autonomous program I wanted it to be. (For instance, not everyone has the rights to install modules on their servers).
  2. Module::CoreList is incomplete. I don't know if it's because my version of Perl isn't supported or if I was using it wrong, but I got many of the Modules from perlmodlib in the output.
  3. Module::CoreList contains a big hash like the one right there, except mine worked for what was needed.
  4. I didn't need hashes of all the modules for all versions of perl. A hash of all of the modules was sufficient because if it was installed, 10 to 1 it came with Perl
  5. After playing around with it for a couple minutes, I figured it would be much quicker to create a macro in Emacs to grab the modules from perldoc perlmodlib, and it was.
  6. I also contemplated ripping modules from perldoc perlmodlib so that I would be sure of having the right modules for that particular version of Perl. I decided against it because that assumed that perldoc was installed, that the user had access rights to it, and that all perlmodlib pages were formatted a certain way (i.e. I'd have to do some debugging on different versions of Perl to be sure -- which seemed like more trouble then it was worth).

Want to support the EFF and FSF by buying cool stuff? Click here.
  • Comment on Re: Re: Search @INC And Display Modules

Replies are listed 'Best First'.
Re: Re: Re: Search @INC And Display Modules
by eserte (Deacon) on Apr 06, 2004 at 17:35 UTC
    In Tk::Pod::FindPods I just use the following subroutine to determine whether a module is a non-core module:
    sub is_site_module { my $path = shift; if ($^O eq 'MSWin32') { return $path =~ m|[/\\]site[/\\]lib[/\\]|; } $path =~ /^( \Q$Config{'installsitelib'}\E | \Q$Config{'installsitearch'}\E )/x; }