- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我没有经常使用 Carp,因为我通常都是自己开发的。然而,本着与核心模块保持一致的精神,我现在正在使用它。然而,它似乎只比 warn/die 好不了多少。
此外,cluck/confess/verbose 还能做什么?我运行了这个简短的脚本来了解输出的样子(因为 Carp 文档不这样做)。在任何运行中它看起来都完全相同(除了随机字符串)。
#!/usr/bin/perl
package Warning;
sub warning {
warn "warn";
}
package CWarn;
use Carp qw(carp cluck);
sub cwarn {
int(rand(2)) ? carp "carp" : cluck "cluck";
}
package Fatal;
use Carp qw(confess croak);
sub fatal {
int(rand(2)) ? confess "confess" : croak "croak";
}
package Loop;
use v5.10;
sub loop {
say '=' x 80;
Warning::warning();
CWarn::cwarn();
loop() unless ($c++ > 10);
Fatal::fatal();
}
package main;
Warning::warning();
CWarn::cwarn();
Loop::loop();
更新:使用包名称更新了脚本,它确实有所不同。然而,Carp 在日志信息方面似乎仍然非常基础,并且不支持 Web 输出。我想我会看看其他的,比如 CGI::Carp、Log::Output 和 Log::Log4Perl。
最佳答案
您的示例的问题是您的所有子程序都位于同一个包中(默认包:main
)。这不是 Carp 的用例。专为。
Carp 旨在用于模块中。原因是,当模块遇到问题时,通常是因为模块的调用者向其传递了错误的数据。因此,报告模块被调用的行(从模块外部的代码)通常更有用,而不是报告模块发现问题的行。这就是 Carp 导出的函数的作用。
有 2 组是/否选项。该函数可以是致命的(如 die
)或非致命的(如 warn
)。它可以只报告调用函数的行,也可以报告完整的回溯。
Fatal Backtrace
carp N N
cluck N Y
croak Y N
confess Y Y
详细选项强制回溯。也就是说,它使 carp
表现得像 cluck
,而 croak
表现得像 confess
。当您意识到需要更多调试信息,但又不想更改代码以使用 confess
时,可以使用它。
关于perl - Carp/Croak、Cluck/Confess 和详细选项之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617852/
我没有经常使用 Carp,因为我通常都是自己开发的。然而,本着与核心模块保持一致的精神,我现在正在使用它。然而,它似乎只比 warn/die 好不了多少。 此外,cluck/confess/verbo
Perl 有一个名为 Carp 的模块,可以从中打印消息(无需明确引发异常),它会打印消息和完整的堆栈跟踪。即 use Carp qw(cluck) ; cluck ("foo") 会产生: foo
我知道如何覆盖 perl 中的内置函数,我已经覆盖了 die warn say 并且自从print 和 printf 无法覆盖我已将其绑定(bind)到我的日志记录框架的句柄。 覆盖 warn 的示例
我是一名优秀的程序员,十分优秀!