首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我应该在Perl中使用Carp而不是warn?

为什么我应该在Perl中使用Carp而不是warn?
EN

Stack Overflow用户
提问于 2008-10-09 19:10:49
回答 3查看 9.8K关注 0票数 26

人们一直给我举carp的例子,而不是warn。为什么?是什么让carp比warn更好?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-09 19:16:43

carp为您提供了有关消息来源的更多信息(上下文)

代码语言:javascript
复制
#!/usr/bin/perl

use Carp;

foo();
bar();
baz();

sub foo {
  warn "foo";
}

sub bar {
  carp "bar";
}

sub baz {
  foo();
  bar(); 
}

产生

代码语言:javascript
复制
foo at ./foo.pl line 9.
bar at ./foo.pl line 13
        main::bar() called at ./foo.pl line 6
foo at ./foo.pl line 10.
bar at ./foo.pl line 14
        main::bar() called at ./foo.pl line 19
        main::baz() called at ./foo.pl line 7

对于这个小程序来说有点傻,但是当您想知道是谁调用了这个方法时,它就派上用场了。

票数 41
EN

Stack Overflow用户

发布于 2008-10-09 19:14:02

在模块内调试时,carp效果更好。如果你只是写一个简单的脚本,这是没有好处的。来自the Carp documenation

Carp例程在您自己的模块中很有用,因为它们的行为类似于

()或warn(),但具有更可能对模块的用户有用的消息。在cluck、confess和longmess的情况下,上下文是调用堆栈中每个调用的摘要。对于较短的消息,您可以使用carp或croak,它们会报告错误来自调用模块的位置。不能保证这就是错误所在,但这是一个很好的有根据的猜测。

票数 12
EN

Stack Overflow用户

发布于 2008-10-09 19:51:57

Carp从调用者的角度报告错误。这对于您通常想要警告错误用法(例如,缺少参数)并标识错误发生位置(而不是检测到错误的位置)的模块很有用。对于可能在许多地方使用的实用函数,这一点尤其重要。

大多数作者在脚本中使用warn,在模块中使用carp。有时,当我希望错误消息反映模块实现中的问题时(例如,它应该支持但不支持的情况),我会在模块内部使用warn。有争议的是,cluck在这种情况下会更好,因为它提供了完整的堆栈回溯。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/188738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档