gpt4 book ai didi

perl - 为什么不证明接受 -MCarp=verbose?

转载 作者:行者123 更新时间:2023-11-28 19:50:46 27 4
gpt4 key购买 nike

我运行了这个测试脚本:

use strict;
use warnings;
use Test::More tests => 3;
use Carp;

ok(1<2);
pass();
fail();
croak "example";

使用命令行prove -MCarp=verbose -v foo.pl,得到如下错误:

Subroutine App::Prove::verbose redefined at /opt/ActivePerl-5.12/lib/App/Prove.pm line 407
App::Prove::_load_extension('App::Prove=HASH(0x683718)', 'Carp=verbose') called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 419
App::Prove::_load_extensions('App::Prove=HASH(0x683718)', 'ARRAY(0x683850)') called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 481
App::Prove::run('App::Prove=HASH(0x683718)') called at /opt/ActivePerl-5.12/bin/prove line 11
Undefined subroutine &Carp::verbose called at /opt/ActivePerl-5.12/lib/App/Prove.pm line 484.

如果我使用 perl -MCarp=verbose foo.pl 运行它,就没有问题。是什么导致 prove 拒绝冗长的 Carp?当它们 croak 而不是全局替换 croakconfess 时,我如何从我的测试中获得完整的调用堆栈?

最佳答案

prove -M 似乎不等同于 perl -M。它似乎加载了一个证明扩展,而不是将模块加载到您的测试中。文档在这一点上完全不清楚,但 App::Prove 中的代码却不是。所以 prove -MCarp=verbose 将 Carp::verbose 导入 App::Prove 导致上述问题。

一个简单的方法来做你想做的是使用 PERL5OPT 环境变量加上 Carp::Always这会将所有警告和死亡(以及鲤鱼和呱呱)变成堆栈跟踪。

PERL5OPT=-MCarp::Always prove ...

这具有在任何情况下工作的额外好处,无论是否有证据。

关于perl - 为什么不证明接受 -MCarp=verbose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com