http://www.perlmonks.org?node_id=942285


in reply to Including files

> use lib 'path/to/the/modules';

and for same directory files (as i just figured out), no path is needed, just the name. For example, including my local db module:"

use lib 'db';

Replies are listed 'Best First'.
Re^2: Including files
by Juerd (Abbot) on Dec 09, 2011 at 11:46 UTC

    If the module you're including is actually in the current directory, no use lib is required at all, since the current working directory, also known as ".", is already in @INC by default.

      Let me get this straight:
      • ~/abc/moo.pl
      • ~/abc/cow.pm
      • ~/zyx/cow.pm
      • current directory is ~/zyx

      moo.pl has:

      • use cow
      • use lib 'cow'

      When i execute moo.pl, . is set to ~/zyx, so:

      • use cow means ~/zyx/cow.pm
      • use lib 'cow' means ~/abc/cow.pm

      Did i get it right that, basically, there is a difference between the "current" directory and the directory of the pl file. Or, put another way, if i keep all my project files in the same directory, like we do during development, and the directory may change, and the directory i execute it from may change, "use lib" will work "as expected".

        Did i get it right that

        No. Read lib. use lib 'cow'; is the standard, clean alternative to unshift @INC, 'cow'; It adds a directory to the search locations; it does not identify or pull in any files into the current program.

        if i keep all my project files in the same directory, ... "use lib" will work "as expected".

        No; if you do that, then you never need use lib ... at all, for the simple reason that '.' is in @INC by default.

        I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.