use constant TESTVERSION => 2;
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我想根据一些检查更改常量的值。如果条件为真,我应该使用相同的 TESTVERSION,如果为假,我必须使用一些不同的版本。perl 是否可以在运行时更新常量值?
不,必须在编译时(或至少在编译使用的代码之前)定义常量。但是没有什么可以阻止您在编译时进行检查。
use constant TESTVERSION => cond() ? 2 : 3;
Run Code Online (Sandbox Code Playgroud)
或者
sub test_version {
return cond() ? 2 : 3;
}
use constant TESTVERSION => test_version();
Run Code Online (Sandbox Code Playgroud)
或者
my $test_version;
BEGIN {
$test_version = cond() ? 2 : 3;
}
use constant TESTVERSION => $test_version;
Run Code Online (Sandbox Code Playgroud)
常量表现为一个带有空原型的子,它总是返回相同的值,所以它可以被内联。用一个真正的子程序重新定义它。
use strict;
use warnings;
use feature 'say';
use constant TESTVERSION => 2;
my $TESTVERSION = TESTVERSION;
{ no warnings 'redefine';
sub TESTVERSION() { $TESTVERSION }
}
for my $condition (0, 1) {
$TESTVERSION = 3 if $condition;
say TESTVERSION;
}
Run Code Online (Sandbox Code Playgroud)