0

我正面临一个非常奇怪的问题。我有一个 perl 脚本,它在内部调用另一个 perl 脚本。当我从 unix 手动运行时,我没有遇到任何问题。

现在,当从 control-m 调度程序调度相同的脚本时,会为查找 date:manip 包的内部脚本提供编译错误。

Can't locate Date/Manip.pm in @INC.BEGIN failed--compilation aborted for script.

不幸的是,由于客户端问题,我无法在此处附加脚本。

但是有人可以帮忙吗?

4

1 回答 1

1

这通常意味着命令行上的库路径(从 unix 运行时)与在 control-m 中运行时不同。

在脚本顶部,在任何其他 Perl 代码之前,添加以下内容:

BEGIN { die 'INC: ' . join("\n", @INC) }

这将立即抛出一个异常,其中包含 perl 将搜索以查找模块的所有库路径。

现在在 unix 和 contol-m 中再次运行该脚本。库包含路径(包含在 @INC 中)可能不同。control-m 可能缺少一个或多个库路径。任何缺少的都可以明确包含:

use lib '/some/library/path';

这就是简单的答案。

如果您遇到这个问题(通常是这种情况),那么您应该解决更大的环境问题,并且没有一个万能的答案。进行use lib修复是一种快速破解,但从长远来看并不是解决此问题的正确方法。

于 2014-01-25T04:15:49.787 回答