我用Google搜索了一种做这种事情的方法。
我使用这个shell命令:
perl -I/p2 maxconnect4.p1 arg1 arg2 arg3 arg4
我的pl文件和pm文件都在“p2”目录中。
然而,它给了我一个错误:
Can't open perl script "maxconnect4.pl": No such file or directory
任何人都可以解释原因吗?
答案 0 :(得分:5)
你有两个问题:
-I
不适用于在命令行中指定的文件,仅适用于使用require
或use
加载的模块。
您不应将相对目录与-I
一起使用。如果您的脚本执行chdir
,那么该目录现在相对于 new 当前目录,而不是脚本启动时的当前目录。 (在许多情况下,您可以通过违反此规则而逃脱,因为大多数情况下,模块在脚本启动时加载,然后才更改目录。)
你实际上并没有使用相对目录,因为你说的是-I/p2
,这意味着要查看名为/p2
的目录,而不是在名为p2
的子目录中当前目录(这是你想说的)。
尝试:
perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
(假设您使用的是Unix类型的shell)。
在许多情况下,更好的解决方案是自动设置脚本@INC
。在p2/maxconnect4.pl
的顶部(在从p2
加载任何模块之前,放置):
use FindBin;
use lib $FindBin::Bin;
use lib
是-I
开关的编程版本,FindBin告诉您的脚本它所在目录的路径名。然后你可以说:
perl p2/maxconnect4.pl arg1 arg2 arg3 arg4
并且根本无需担心-I
。
答案 1 :(得分:3)
perl
需要一个真实的文件来执行。你必须通过其绝对或相对路径来调用它:
perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4