我用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
任何人都可以解释,为什么?
我用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
任何人都可以解释,为什么?
你有两个问题:
装载require
-I
并不适用于在命令行上指定的文件,只有模块或use
。
你不应该使用相对目录与-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
。
perl
需要一个真正的文件来执行。你必须通过它的绝对或相对路径来调用它:
perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
是的,我应该绝对的目录。非常感谢。有用。 – Fihop 2010-09-26 20:18:34