关于perl“;使用「;关键词

关于perl“;使用「;关键词,perl,perl-module,Perl,Perl Module,现在,我有一个perl文件test.pl,它必须引用其他perl模块Hello.pm、Hello.pm和test.pl,它们位于同一目录中,并且包名声明 Hello.pm的名称是包MRS::scripts::Hello。那么,我应该如何在test.pl中使用模块Hello.pm呢 我尝试了使用Hello和使用MRS::scripts::Hello,但系统在@INC中找不到Hello.pm。 怎么了?如果包名是MRS::scripts::Hello,perl将搜索MRS/scripts/Hello

现在,我有一个perl文件test.pl,它必须引用其他perl模块Hello.pm、Hello.pm和test.pl,它们位于同一目录中,并且包名声明 Hello.pm的名称是
包MRS::scripts::Hello
。那么,我应该如何在test.pl中使用模块Hello.pm呢

我尝试了
使用Hello
使用MRS::scripts::Hello
,但系统在@INC中找不到Hello.pm。
怎么了?

如果包名是
MRS::scripts::Hello
,perl将搜索
MRS/scripts/Hello.pm
。创建目录结构,或从模块文件中删除名称空间

换句话说,有三件事必须一致:文件路径、包名和
使用的参数


如果要更改包名,请小心。如果脚本中提到名称空间(完全限定名),您也应该更改它们。

如果包名是
MRS::scripts::Hello
,perl将搜索
MRS/scripts/Hello.pm
。创建目录结构,或从模块文件中删除名称空间

换句话说,有三件事必须一致:文件路径、包名和
使用的参数


如果要更改包名,请小心。如果脚本中提到名称空间(完全限定名),您也应该更改它们。

use
采用包名。然后它将每个
更改为路径分隔符,如
/
,并附加
.pm
。因此,正确的用法是
use Hello

这里有一个问题:
Hello.pm
必须位于
@INC
的一个根目录下。在我的一个perl上,
@INC
有如下条目

/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1
.
最后一个很有趣:
代表当前工作目录。不幸的是,这并不总是与脚本的位置相匹配。我们可以通过
FindBin
模块解决这个问题:

use FindBin;             # get the script location, populates $FindBin::Bin
use lib $FindBin::Bin;   # tell perl to look for modules next to your script
use MRS::scripts::Hello; # load your module

…假设模块位于文件
$FindBin::Bin/MRS/scripts/Hello.pm

中,则use
采用包名。然后它将每个
更改为路径分隔符,如
/
,并附加
.pm
。因此,正确的用法是
use Hello

这里有一个问题:
Hello.pm
必须位于
@INC
的一个根目录下。在我的一个perl上,
@INC
有如下条目

/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/site_perl/5.18.1
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1/i686-linux-thread-multi-64int
/home/amon/.config/perlbrew/perls/perl-5.18.1/lib/5.18.1
.
最后一个很有趣:
代表当前工作目录。不幸的是,这并不总是与脚本的位置相匹配。我们可以通过
FindBin
模块解决这个问题:

use FindBin;             # get the script location, populates $FindBin::Bin
use lib $FindBin::Bin;   # tell perl to look for modules next to your script
use MRS::scripts::Hello; # load your module

…假设模块位于文件
$FindBin::Bin/MRS/scripts/Hello.pm

中,如果@INC不存在,请确保将所需路径添加到@INC。如果@INC不存在,请确保将所需路径添加到@INC。对于
使用
成功导入模块导出的任何符号,
use
必须与文件中的
package
匹配,因此
use Hello
不正确。文件需要放置在
MRS/scripts/Hello.pm
@INC
目录下,然后
使用MRS::scripts::Hello
。要成功导入模块导出的任何符号,
use
必须与文件中的
包相匹配,因此
使用Hello
是不正确的。文件需要放置在
@INC
目录下的
MRS/scripts/Hello.pm
,然后
使用MRS::scripts::Hello