Search code examples
perlarraysperlvar

What is the difference betweeen %INC and @INC?


What is the difference between %INC and @INC in Perl?


Solution

  • The @INC array holds all the file system paths where Perl will be looking for modules when you use or require them.

    After use or require, the %INC hash will contain the loaded modules and where they were loaded from.

    Examples from my laptop:

    @INC:

    '/etc/perl',
    '/usr/local/lib/perl/5.10.0',
    '/usr/local/share/perl/5.10.0',
    '/usr/lib/perl5',
    '/usr/share/perl5',
    '/usr/lib/perl/5.10',
    '/usr/share/perl/5.10',
    '/usr/local/lib/site_perl',
    '.'
    

    and %INC:

    'warnings/register.pm' => '/usr/share/perl/5.10/warnings/register.pm',
    'bytes.pm' => '/usr/share/perl/5.10/bytes.pm',
    'XSLoader.pm' => '/usr/lib/perl/5.10/XSLoader.pm',
    'Carp.pm' => '/usr/share/perl/5.10/Carp.pm',
    'Exporter.pm' => '/usr/share/perl/5.10/Exporter.pm',
    'warnings.pm' => '/usr/share/perl/5.10/warnings.pm',
    'overload.pm' => '/usr/share/perl/5.10/overload.pm',
    'Data/Dumper.pm' => '/usr/lib/perl/5.10/Data/Dumper.pm'
    

    (%INC contains Data::Dumper because I used it to quickly dump those two values).