Search code examples
perlmodulestandard-library

How can I tell if a Perl module is core or part of the standard install?


How can I check if a Perl module is part of the core - i.e. it is part of the standard installation?

I'm looking for:

  • a command-line command:
  • a Perl subroutine/function to check within code

Perhaps the question should be: How can I tell what modules were originally provided with the specific Perl installation on a machine? (Actually, it is now asked as How can I tell what modules were originally provided with the specific Perl installation on a machine?.)

Given that there now appears to not to be an overall Perl standard installation, at least the answer to this new question will tell me what I originally had in the installation when it was first installed.

With that knowledge and if I keep the original installer image/package OR know how to get the exact thing again online, then I have a repeatable Perl installation for several machines with the knowledge of what modules will be present and what modules will not.

To clarify further: I am looking at what came with the installation originally, what modules were provided as part of that installation, and what was built-in. NOT what has been installed since then.

And I want to be able to do this on the machine that has the installation. So for this I would be relying upon the installation to have a record in some form as to what it has originally.

I asked spin-off question: How can I tell what modules were originally provided with the specific Perl installation on a machine? (How can I tell what modules were originally provided with the specific Perl installation on a machine?)


Solution

  • The corelist command from the Module::CoreList module will determine if a module is Core or not.

    > corelist Carp
    
    Carp was first release with perl 5
    
    > corelist XML::Twig
    
    XML::Twig was not in CORE (or so I think)
    

    Here is one way to use it in a script. The Module::CoreList POD is too terse -- you have to go hunting through the source code to find what methods to call:

    use strict;
    use warnings;
    use Module::CoreList;
    
    my $mod = 'Carp';
    #my $mod = 'XML::Twig';
    my @ms = Module::CoreList->find_modules(qr/^$mod$/);
    if (@ms) {
        print "$mod in core\n";
    }
    else {
        print "$mod not in core\n";
    }
    
    __END__
    
    Carp in core