【发布时间】:2026-02-07 18:00:01
【问题描述】:
我已经用谷歌搜索了一种方法来做这种事情。
我使用这个 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
谁能解释一下原因?
【问题讨论】:
我已经用谷歌搜索了一种方法来做这种事情。
我使用这个 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
谁能解释一下原因?
【问题讨论】:
你有两个问题:
-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。
【讨论】:
perl 需要一个真实的文件来执行。你必须通过它的绝对或相对路径来调用它:
perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
【讨论】: