如何通过 `use strict` 正确使用 `our` class 变量和 `UNITCHECK`?

How to use `our` class variables with `UNITCHECK` correctly with `use strict`?

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

our $foo = '...';

然而,当我使用 class 变量添加一个 UNITCHECK 块时,我意识到变量尚未设置,所以我将代码更改为:

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

UNITCHECK {
    if ($foo eq 'bla') {
        #...
    }
}

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

Variable "$foo" is not imported at .. line ..

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

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

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

推荐的正确方法是什么?

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

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

UNITCHECK {
    if ($foo eq 'bla') {
        #...
    }
}