为什么Perl在使用-I开关时没有找到我的脚本?

Fih*_*hop 0 shell perl command

我用Google搜索了一种做这种事情的方法.

我用这个shell命令:

perl -I/p2 maxconnect4.p1 arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)

我的pl文件和pm文件都在"p2"目录中.

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

Can't open perl script "maxconnect4.pl": No such file or directory
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?

cjm*_*cjm 5

你有两个问题:

  1. -I不适用于在命令行上指定的文件,仅适用于使用require或加载的模块use.

  2. 你不应该使用相关目录-I.如果您的脚本执行了chdir,那么该目录现在相对于新的当前目录,而不是脚本启动时的当前目录.(在许多情况下,您可以放弃违反此规则,因为大多数情况下,模块在脚本启动时加载,然后才更改目录.)

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

尝试:

perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)

(假设您使用的是Unix类型的shell).

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

use FindBin;
use lib $FindBin::Bin;
Run Code Online (Sandbox Code Playgroud)

use lib-I交换机的编程版本,FindBin告诉您的脚本它所在目录的路径名.然后你可以说:

perl p2/maxconnect4.pl arg1 arg2 arg3 arg4
Run Code Online (Sandbox Code Playgroud)

而不必费心-I.