我有一堆Perl脚本都运行良好,但需要有use Plibdata;顶部.
我设置了一个运行的cron作业(我从root获取确认电子邮件)并且它回吐了以下错误消息:
Can't locate Plibdata.pm in @INC (@INC contains: /install/lib /opt/perl58/lib/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/5.8.8 /opt/perl58/lib/site_perl/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/site_perl/5.8.8 /opt/perl58/lib/site_perl .) at ./x line 5.
BEGIN failed--compilation aborted at ./x line 5.
Run Code Online (Sandbox Code Playgroud)
第5行是......你猜对了.... use Plibdata;
我也试图设置环境:
use lib "$ENV{CARSPATH}/install/lib";
Run Code Online (Sandbox Code Playgroud)
所以也许如果我找到了这个plibdata的位置,我可以明确指示它吗?
我的cron命令将使用/usr/bin/shcrontabs说来执行...
有什么建议?
此脚本从命令行运行.
你没有说Plibdata是什么.您也没有说明这是否适用于您的命令提示符.我认为确实如此.
试试这个:
perl -MPlibdata -e 1
Run Code Online (Sandbox Code Playgroud)
假设没有吐出相同的错误,试试这个:
perl -MPlibdata -le 'print $INC{"Plibdata.pm"}'
Run Code Online (Sandbox Code Playgroud)
那会告诉你在哪里.(它可能在您的PERL5LIB env var中如果有效.)然后您可以将相应的"use lib"添加到Plibdata.pm所在的目录中.
另外,请确保在两个位置使用相同的perl - 命令行("per perl")和cron作业(在脚本顶部尝试"BEGIN {print $ ^ X}").
显然,Plibdata.pm未安装在系统的默认模块路径中:
/install/lib /opt/perl58/lib/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/5.8.8 /opt/perl58/lib/site_perl/5.8.8/IA64.ARCHREV_0-thread-multi /opt/perl58/lib/site_perl/5.8.8 /opt/perl58/lib/site_perl
Run Code Online (Sandbox Code Playgroud)
你有三个选择:
Plibdata.pm在已知的Perl系统路径中安装(site_perl是经典选项).
使PERL5LIB shell环境(或-IPerl 的等效命令行选项)包括模块的安装路径.
use lib在脚本中使用.请记住,use lib操作是在编译时完成的,因此路径中的变量可能无法初始化.尝试在BEGIN块中使用变量,如下所示:
my $env;
BEGIN {
$env = $ENV{CARSPATH};
}
use lib "$env/install/lib";
Run Code Online (Sandbox Code Playgroud)