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

时间:2010-09-26 19:49:37

标签: perl shell command

我用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

任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:5)

你有两个问题:

  1. -I不适用于在命令行中指定的文件,仅适用于使用requireuse加载的模块。

  2. 您不应将相对目录与-I一起使用。如果您的脚本执行chdir,那么该目录现在相对于 new 当前目录,而不是脚本启动时的当前目录。 (在许多情况下,您可以通过违反此规则而逃脱,因为大多数情况下,模块在脚本启动时加载,然后才更改目录。)

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

  3. 尝试:

    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