关于perl“;使用「;关键词
现在,我有一个perl文件test.pl,它必须引用其他perl模块Hello.pm、Hello.pm和test.pl,它们位于同一目录中,并且包名声明 Hello.pm的名称是关于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
包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
。