鲤鱼/咕噜,咕咕/忏悔和详细选项有什么区别?
我没有使用鲤鱼,因为我一般都是自己动手的。 但是,本着保持核心模块的精神,我现在正在使用它。 但是,它似乎只比警告/死亡好。
而且,咕咕/忏悔/详细甚至是做什么? 我已经运行这个简短的脚本来获得输出的想法(因为鲤鱼文档不这样做)。 它看起来完全一样(除了随机string)。
#!/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();
更新:更新与包名称的脚本,它确实有所作为。 然而,鲤鱼在logging信息方面似乎仍然非常基础,并且不支持networking输出。 我想我会看看像CGI ::鲤鱼,日志::输出和Log :: Log4Perl其他的。
你的例子的问题是,你所有的潜艇是在同一个包(默认包: main
)。 这不是鲤鱼devise的用例。
鲤鱼是打算在模块中使用。 原因是当模块遇到问题时,通常是因为模块的调用者传递了错误的数据。 因此,不是报告模块发现问题的那一行,而是通过报告模块被调用的行(从模块外部的代码)来报告。 这就是鲤鱼出口的function。
有2组是/否选项。 该function可能是致命的(如die
)或非致命的(如warn
)。 它只能报告函数被调用的行,或者可以报告完整的回溯。
Fatal Backtrace carp NN cluck NY croak YN confess YY
详细选项强制回溯。 也就是说, carp
就像cluck
, croak
act一样。 当你意识到你需要更多的debugging信息时,你可以使用它,但是不想改变代码来使用confess
。
Carp
比warn
/ die
要好,因为它会显示所谓的函数抛出错误的文件和行,而不是简单地抛出错误的地方。 这对于图书馆来说通常是有用的。 (例如,数据库库应该可能会抛出错误,指出错误的数据库调用的位置,而不是在其内部指示一行。)
carp
, cluck
croak
, cluck
, confess
给你四种select组合:
-
carp
:不致命,没有回溯 -
cluck
:不是致命的,有回溯 -
croak
:致命,没有回溯 -
confess
:致命,带回溯