2010-09-26 51 views
0

我用Google搜索了一种方法来做这种事情。为什么Perl在使用-I开关时找不到我的脚本?

我用这个shell命令:

perl -I/p2 maxconnect4.p1 arg1 arg2 arg3 arg4 

我的PL文件和文件下午都在 “P2” 目录。

但是,它给了我一个错误:

Can't open perl script "maxconnect4.pl": No such file or directory 

任何人都可以解释,为什么?

回答

5

你有两个问题:

  1. 装载require-I并不适用于在命令行上指定的文件,只有模块或use

  2. 你不应该使用相对目录与-I。如果您的脚本执行chdir,那么该目录现在相对于当前目录的新的,而不是脚本启动时的当前目录。 (在许多情况下,你可以逃脱打破这个规则,因为大多数情况下,模块在脚本启动时加载,在它改变目录之前。)

    而且你实际上并没有使用相对目录,因为你说-I/p2,这意味着要查找名为/p2的目录,而不是在当前目录中的名为p2的子目录中(这正是你想说的)。

尝试:

perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4 

(假设你使用的是Unix类型的外壳)。

在很多情况下,更好的解决方案是让脚本自动设置@INC。在p2/maxconnect4.pl顶部(从p2加载任何模块之前,放):

use FindBin; 
use lib $FindBin::Bin; 

use lib-I开关的程序版本,并FindBin告诉你的脚本程序所在的目录的路径名。那么你可以说:

perl p2/maxconnect4.pl arg1 arg2 arg3 arg4 

而且根本就不用打扰-I

+0

是的,我应该绝对的目录。非常感谢。有用。 – Fihop 2010-09-26 20:18:34

3

perl需要一个真正的文件来执行。你必须通过它的绝对或相对路径来调用它:

perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4 
+0

非常感谢。我已经试过你的方式。它给了我一个新的错误: – Fihop 2010-09-26 19:59:57

+0

错误:无法找到AiPlayer.pm in @INC – Fihop 2010-09-26 20:00:13

+0

如果我去目录p2,并使用命令:perl maxconnect4.pl arg1 arg2 arg3 arg4。它运作良好。我想这是搜索路径的问题。我对Perl完全陌生。非常感谢您的帮助。 – Fihop 2010-09-26 20:02:42

相关问题