Perl使用/需要绝对路径?

Bry*_*eld 6 perl absolute-path

如果我有一个.pm文件,有没有办法,我可以use把它放在我的@INC路径上?我认为在我的特定用例中会更清楚 - 比使用相对路径或添加此目录更清晰@INC.

编辑:澄清:

我希望避免的必要性,通过在每一个项目进行迭代@INC,而是直接指定我的文件感兴趣.例如,在node.js中,require('something')将搜索的路径列表,但require('/specific/something')在这里我告诉它会直接进入.

在Perl中,我不确定这是否具有相同的功能require,但它似乎有效.

但是,use声明需要裸字.这让我对如何进入绝对路径感到有点困惑.

Gil*_*not 5

你可以用这个:

use lib '/path/to/Perl_module_dir'; # can be both relative or absolute
use my_own_lib;
Run Code Online (Sandbox Code Playgroud)

你可以@INC自己修改(暂时,没有恐惧,这也是什么use lib):

BEGIN{ @INC = ( '/path/to/Perl_module_dir', @INC ); } # relative or absolute too
use my_own_lib;
Run Code Online (Sandbox Code Playgroud)

  • 将一个模块放在与你的程序相同的目录中只有这是你的工作目录才能正常工作.`.!= dirname <program>`默认情况下...... (2认同)

小智 4

根据评论中的讨论,我建议使用require它本身。就像下面这样,

require "pathto/module/Newmodule.pm";

Newmodule::firstSub();
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下其他选项

  • use lib 'pathto/module';需要将此行添加到要在其中使用该模块的每个文件中。

使用 lib '路径/模块';
使用新模块;

  • 使用PERL5LIB环境变量。使用导出在命令行上设置它或将其添加到,~/.bashrc以便每次登录时它都会添加到您的@INC. 请记住 PERL5LIB 在所有 @INC 目录之前添加目录。所以会先使用它。你也可以在 apache httpd.conf 中设置它

    SetEnv PERL5LIB /fullpath/to/module
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者将其设置在 BEGIN 块中。