如何通过 `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 warnings
和use 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') {
#...
}
}
由于 Perl 常量使用起来有些奇怪,我决定将我的“class 变量”实现为 our
变量,就像:
our $foo = '...';
然而,当我使用 class 变量添加一个 UNITCHECK
块时,我意识到变量尚未设置,所以我将代码更改为:
BEGIN {
our $foo = '...';
}
UNITCHECK {
if ($foo eq 'bla') {
#...
}
}
然后我意识到我在UNITCHECK
中输入了一些变量名,所以我决定添加use warnings
和use 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') {
#...
}
}