Packages and Files

The same package declaration can be present in multiple files. Or multiple packages can be declared in one file. By convention, a package is usually assigned its own file and named package.pm or package.pl. Files with the suffix .pm are called Perl modules, and packages inside files with the suffix .pl are usually referred to as libraries . The former naming convention is preferred now because the use statement requires it, as we will soon see.

The require keyword simply loads a file into your program (sources it, in shell parlance). This is identical in spirit to #include in C, except that Perl does not bother about a file that has already been loaded:[26]

require "test.pl"; # load test.pl if it hasn't already been loaded

If you omit the suffix and the quotes, a .pm suffix is assumed. The use statement is similar in that respect, but is more restrictive in that it accepts only module names, not filenames. So, while there is no necessary relation between module names and filenames in general, use does force you to adopt a standard naming convention, which is a very good thing indeed, in my opinion. But there is more to use than just syntactic sugar.

The big difference between use and require is that the use statement is executed as soon as it is parsed. For this reason, the following attempt to load a module dynamically won’t work, because the assignment statement is executed only after everything has been parsed and compiled:

$pkg_name = "Account"; # executes ...

Get Advanced Perl Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.