You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Devel::Cover中||与//运算符的Condition覆盖率异常咨询

Devel::Cover中||与//运算符的Condition覆盖率异常问题

环境信息

  • Perl: 5.40
  • Devel::Cover: 1.44

我在编写单元测试时用Devel::Cover查看Condition覆盖率报告,碰到了和||(逻辑或)、//(定义或)运算符相关的奇怪问题。

正常工作的基础代码

use strict;
use warnings;

use 5.026;

my($DEF_MIN) = 1;
our($DEF_MAX) = 10;

sub test
{
    my($hashref) = @_;
    $hashref ||= {};

    my($min) = $hashref->{'min'} || 1;
    my($max) = $hashref->{'max'} // 10;

    say qq(MIN: $min / MAX: $max);

    return;
}

test();
test({});
test({ min => 14 });
test({ max => 14 });
test({ min => 10, max => 14 });

运行这段代码后,Condition覆盖率报告符合预期(仅显示A列)。

修改后出现异常的代码

把代码里的min和max赋值语句改成下面这样:

my($min) = $hashref->{'min'} || $DEF_MIN;
my($max) = $hashref->{'max'} // $DEF_MAX;

这时生成的覆盖率报告就变了——原本只显示A列,现在同时显示A和B列。

问题与测试结论

为什么会出现这种变化?我该怎么补全这类覆盖率,或者把它标记为不可覆盖的代码路径?

测试后发现:不管用||还是//,不管右侧是词法变量还是包变量,都会出现这个问题。


内容的提问来源于stack exchange,提问作者Joe Casadonte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:33:20