在perl中使用错误但没有堆栈跟踪的正确方法是什么?

Rya*_*son 6 error-handling perl die

我正在编写一个perl脚本,在我正在检查用户在命令行上提供的选项的部分中,我想退出时出现错误,解释选项有什么问题.在这种情况下,不需要堆栈跟踪与此错误消息一起使用.那么,使用错误消息但没有堆栈跟踪或调试信息的最佳方法是什么?

我尝试过以下方法:

die "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 49.
Run Code Online (Sandbox Code Playgroud)

然后,我试过了

use Carp;
...
croak "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 47
    main::prepare_output_directory() called at myscript.pl line 546
Run Code Online (Sandbox Code Playgroud)

那我怎么能Invalid options和别人一起死?

奖金问题:为什么croak告诉我错误是在第47行,当实际呼叫croak是在第49行?

Sea*_*ean 18

只需在die字符串末尾添加换行符:

die "Invalid options\n";
Run Code Online (Sandbox Code Playgroud)

这样可以防止错误的位置被附加到您的邮件中.

  • 我想他们会阅读文档.[perldoc -f die](http://perldoc.perl.org/functions/die.html) (20认同)
  • 我有点希望有一种方法可以对 `croak` 做同样的事情。我的理解是,从语义上讲,`die` 是针对内部错误,而 `croak` 是针对由外部原因引起的错误。在这种情况下,我想表明用户输入了无效的选项,这显然是后者的情况。然而,我必须死而不是呱呱以抑制回溯。 (2认同)