代码之家  ›  专栏  ›  技术社区  ›  Fihop

为什么Perl在使用-i开关时找不到我的脚本?

  •  0
  • Fihop  · 技术社区  · 14 年前

    我在谷歌上找到了做这种事的方法。

    我使用这个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
    

    有人能解释为什么吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   cjm    14 年前

    您有两个问题:

    1. -I 不适用于命令行上指定的文件,只适用于加载了 require use .

    2. 不应将相对目录与 -我 . 如果你的脚本 chdir ,则该目录现在相对于 新的 当前目录,而不是脚本启动时的当前目录。(在许多情况下,您可以避免违反此规则,因为大多数情况下,在脚本更改目录之前,在脚本启动时加载模块。)

      你实际上并没有使用相对目录,因为你说 -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 是的程序版本 -我 开关,和 FindBin 告诉脚本它所在目录的路径名。然后你可以说:

    perl p2/maxconnect4.pl arg1 arg2 arg3 arg4
    

    不必费心 -我 完全。

        2
  •  3
  •   eumiro    14 年前

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

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