我有Perl脚本,需要在执行期间确定脚本的完整路径和文件名.我发现,根据你调用脚本的方式$0
不同而有时包含fullpath+filename
,有时只是filename
.因为工作目录也可以变化,所以我想不出可靠地获取fullpath+filename
脚本的方法.
有人有解决方案吗?
我的脚本的父目录中有一个模块,我想'使用'它.
如果我做
use '../Foo.pm';
Run Code Online (Sandbox Code Playgroud)
我得到语法错误.
我试着这样做:
push @INC, '..';
use EPMS;
Run Code Online (Sandbox Code Playgroud)
并且..显然没有出现在@INC中
我要疯了!这有什么不对?
这是一个math.pm
具有2个基本功能的模块add和multiply:
package Math;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT_OK = qw(add multiply);
sub add {
my ($x, $y) = @_;
return $x + $y;
}
sub multiply {
my ($x, $y) = @_;
return $x * $y;
}
1;
Run Code Online (Sandbox Code Playgroud)
这是script.pl
调用add函数的脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Math qw(add);
print add(19, 23);
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
无法在@INC中找到math.pm <@INC包含:C:/ perl/site/lib C:/ perl/lib.>在C:\ programs\script.pl第5行.BEGIN失败 - 编译中止C:\ programs\script.pl第5行.
如何解决这个问题呢?
我在使用Perl时遇到了一些问题.在执行期间,我收到此错误.
Can't locate XML/LibXML/NodeList.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/lib64/perl5/XML/LibXML.pm line 25.
Run Code Online (Sandbox Code Playgroud)
但当我尝试使用locate
命令找到此文件时,我发现它.
/usr/local/lib/perl5/site_perl/5.18.0/x86_64-linux/XML/LibXML/
目录.
我已经安装了不同的perl软件包,它们都安装正确.如果我将单个文件放在指定的位置,那么它会抱怨另一个文件.所以手动放置文件不是一个好主意.
那么我如何改变它的路径,以便它可以从正确的目录执行文件?
编辑
Can't locate loadable object for module XML::LibXML in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/lib64/perl5/XML/LibXML.pm line 154
[Wed Jul 03 10:15:13 2013] [error] [client 192.73.242.136] BEGIN failed--compilation aborted at /usr/local/lib64/perl5/XML/LibXML.pm line 154.
[Wed Jul 03 10:15:13 2013] [error] [client 192.73.242.136] Compilation failed in require at /var/www/cgi-bin/astpp/astpp-cdr-xml.cgi line 23. …
Run Code Online (Sandbox Code Playgroud)