如何通过“use strict”正确使用“我们的”类变量和“UNITCHECK”?

U. *_*ndl 2 variables perl strict

由于 Perl 常量使用起来有些奇怪,我决定将我的“类变量”实现为our变量,就像:

our $foo = '...';
Run Code Online (Sandbox Code Playgroud)

但是,当我UNITCHECK使用类变量添加块时,我意识到变量尚未设置,因此我将代码更改为:

BEGIN {
   our $foo = '...';
}

UNITCHECK {
    if ($foo eq 'bla') {
        #...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我意识到我在 中输入了一些变量名称UNITCHECK,所以我决定添加use warningsuse strict。不幸的是我遇到了新的错误,比如

变量“$foo”未在 .. 行导入。

当我初始化外部变量时BEGIN,错误就消失了,但随后又回到了原来的问题。

所以我想知道:是our $var = 'value';推荐的正确使用,还是应该分为our $var;外部BEGIN$var = 'value;内部BEGIN

由于我的变量列表相当长,我试图避免将它们列出两次(引入再次拼写错误的可能性)。

推荐的正确方法是什么?

JGN*_*GNI 5

our是词法范围的,因此在您的代码中变量仅存在于BEGIN块中。您需要将声明与赋值分开,如下所示:

our $foo;
BEGIN {
    $foo = '...';
}

UNITCHECK {
    if ($foo eq 'bla') {
        #...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“my”在这里也同样有效,因此应该使用“our”来代替。几乎没有理由使用“我们的”。一个值得注意的例外是 Exporter 的变量。 (2认同)