在 perl 中使用 enum::fields 创建的奇怪导出常量
Weirdness exporting constants created with enum::fields in perl
我创建了两个测试模块,X.pm
和 X2.pm
。 X.pm
模块有效。 X2.pm
模块没有,至少不像我期望的那样。
X.pm
package X {
use enum::fields qw(I_VAL);
use parent qw(Exporter);
our @EXPORT = qw(I_VAL);
}
X2.pm
package X2 {
our @EXPORT = qw(I2_VAL);
use enum::fields (@EXPORT);
use parent qw(Exporter);
}
测试程序为:
use X;
use X2;
printf("I_VAL = %d\n", I_VAL);
printf("I2_VAL = %d\n", I2_VAL);
输出为:
bash$ ./tmp/testit
I_VAL = 0
Undefined subroutine &X2::I2_VAL called at /home/bennett/tmp/testit line 15.
真实项目有几十个enum::fields
,X2.pm
是我尝试让枚举与导出同步
我的问题是:
- 为什么
X2
不起作用?之前是否导出(导入)
enum::fields
运行?
- 我该怎么办?
use语句一编译就执行,所以
use enum::fields (@EXPORT);
在
之前执行
our @EXPORT = qw(I2_VAL);
这可行:
package X3;
use strict;
use warnings;
my @enum; BEGIN { @enum = qw( I2_VAL ); }
use Exporter qw( import );
use enum::fields @enum;
our @EXPORT = @enum;
1;
我创建了两个测试模块,X.pm
和 X2.pm
。 X.pm
模块有效。 X2.pm
模块没有,至少不像我期望的那样。
X.pm
package X {
use enum::fields qw(I_VAL);
use parent qw(Exporter);
our @EXPORT = qw(I_VAL);
}
X2.pm
package X2 {
our @EXPORT = qw(I2_VAL);
use enum::fields (@EXPORT);
use parent qw(Exporter);
}
测试程序为:
use X;
use X2;
printf("I_VAL = %d\n", I_VAL);
printf("I2_VAL = %d\n", I2_VAL);
输出为:
bash$ ./tmp/testit
I_VAL = 0
Undefined subroutine &X2::I2_VAL called at /home/bennett/tmp/testit line 15.
真实项目有几十个enum::fields
,X2.pm
是我尝试让枚举与导出同步
我的问题是:
- 为什么
X2
不起作用?之前是否导出(导入)enum::fields
运行? - 我该怎么办?
use语句一编译就执行,所以
use enum::fields (@EXPORT);
在
之前执行our @EXPORT = qw(I2_VAL);
这可行:
package X3;
use strict;
use warnings;
my @enum; BEGIN { @enum = qw( I2_VAL ); }
use Exporter qw( import );
use enum::fields @enum;
our @EXPORT = @enum;
1;