【问题标题】:Usage of -c in perl with code that modifies @INC在 perl 中使用 -c 和修改 @INC 的代码
【发布时间】:2015-05-23 10:32:07
【问题描述】:

考虑以下脚本“test.pl”。

test.pl

#usr/bin/perl -w

push (@INC,"path_for_abc");
use abc;

#rest of the code ...

命令提示符:

$ perl -c test.pl

我知道我必须添加“use lib”编译指示,或者必须在 Begin 块中将路径推入 @INC 中以使其工作。

如果模块的路径没有在@INC 中定义, snytax 检查时“perl -c test.pl”会推送“path_for_abc”吗?

【问题讨论】:

  • 它不会,除非,正如你提到的,你 use lib 或将推送包装到 BEGIN 块中。
  • 我不太明白你的问题。是什么让你觉得perl -c在这方面与perl不同?

标签: perl


【解决方案1】:

不,您的示例代码在以perl -c 运行时找不到“abc”模块。 without -c 运行时也找不到它,但您似乎已经知道了。 use 发生在编译时。 push 直到运行时才会发生,除非它被包装在 BEGIN 块中。如果您这样做(或use lib),那么它perl -c 下工作。来自 perlrun:

-c

让 Perl 检查程序的语法然后退出 不执行它。实际上,它会执行和BEGINUNITCHECK, 或CHECK 块和任何use 语句:这些被视为 发生在程序执行之外。 INITEND 块, 但是,将被跳过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2013-10-12
    • 2011-07-04
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多