What is the difference between library files and modules?

It's all Perl code to perl. All distinctions are purely idiomatic.

Perl code meant for inclusion that uses a package directive:

  • Called "module".
  • Usually has the extension .pm. Must have this extension for use to find them.
  • Should always be loaded with require, possibly via use.
    • Must therefore return a true value.
  • More modular, better supported by CPAN.

Perl code meant for inclusion that doesn't use a package directive:

  • Called "library". (At least historically. These days, "library" might also be used to refer to a module or distribution.)
  • Usually has the extension .pl.
  • Should always be loaded with do.
  • Pollutes the caller's namespace.
  • Usually indicative of a substandard design. Avoid these!

Perl code meant for direct execution by interpreter:

  • Called "script".
  • Usually has the extension .pl, or none at all.
  • Will probably start with a shebang (#!) line so they can be started without specifying perl.

Library files (I'm assuming you mean require 'foo.pl' stuff here) are an obsolete (pre-Perl 5) form of external module. For the most part, you shouldn't need to care any more, although there are still some Perl 4 installations around and therefore still some Perl code that remains backward compatible with them (and there's some code that's simply never been updated and still loads getcwd.pl etc.).

Tags:

Perl