1

我使用配置文件加载逻辑表达式,稍后将根据成功或失败配置替换为 0 或 1

expression=(server.ip.1&&server.ip.2)||(server.ip.3&&server.ip.4)

稍后 server.ip.1 将根据服务器可用性替换为 1 或 0。逻辑表达式评估的后面部分有以下代码。

my $reg_expression= configurator->get_reg_expression() ;

...
$reg_expression =~ s/$values[0]/$ip_status/g;

if ($reg_expression){
    $logger->debug("no failover");
}else{
    $logger->debug("falling to failover mode");
}

问题是如果条件始终为真,则任何值都分配给表达式。问题似乎是它被视为字符串,所以它总是以 true 结尾。我可以做同样的任何其他方式,或者如何将上述变量转移回我可以在 if 条件内成功使用的状态。

 $reg_expression = (0&&0)||(1&&0); # diffe
 $reg_expression = '(0&&0)||(1&&0)';
4

1 回答 1

1

可以使用 eval来评估表达式:

my $reg_expression = '(0&&0)||(1&&0)';
print eval $reg_expression, "\n";
于 2012-08-15T12:14:35.707 回答