Let's look at some module that are installed with perl by default, and let's look a bit behind the scenes of the modules.
You already know that when perl encounters a use
statement, it will look for a file with the same
name, but with .pm
extension in the directories listed in the @INC
array.
So if we write use Cwd;
, perl will look for a file called Cwd.pm
in
the directories listed in @INC
.
What is in @INC
you can check using perl -V
as explained in this episode.
perldoc
If you don't have the perldoc
command installed then on Linux system you usually need to install the
package called perl-doc
in order to have the perldoc
command.
If you have it then you can type perldoc Cwd
(or the name of any other module) and it will
show the documentation of the module. (Use the space-bar to go forward a page and use the q
key to quit the reader.)
Running perldoc -l Cwd
will print out the location of the file containing the module: /usr/lib/perl5/Cwd.pm
.
This can be a useful aid to make sure the correct version of the module is loaded.
perldoc -m Cwd
will show the source code of the file implementing the module.
As we flip though the source code of Cwd we can see it uses strict
and we can also
see the following snippet:
@EXPORT = qw(cwd getcwd fastcwd fastgetcwd);
push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32';
@EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath);
We can see how it inserts values to the @EXPORT
ok, but the next line
is interesting. It pushes another entry onto the @EXPORT
array if the operating system is MS Windows.
From this you can see that these variables can be quite dynamic and can be filled based on various conditions.
There is also the @EXPORT_OK
array with additional functions that can be imported optionally.
If they are needed, but they won't be imported by default.
So now you also know how to look at the source code of a module on your system. Alternatively you can browse to the module on MetaCPAN, for example to the Cwd module and click on the "Source" link on the left hand side. That will show the source code of the most recent version of the module.