Perl 内置退出并在一个命令中打印

Posted

技术标签:

【中文标题】Perl 内置退出并在一个命令中打印【英文标题】:Perl built in exit and print in one command 【发布时间】:2011-07-01 11:22:07 【问题描述】:

我知道我会死,但会打印出脚本名称和行号。

我喜欢做die 'error' if $problem;之类的事情

有没有办法在不打印行号的情况下做到这一点?

不用大括号就好了if($problem)print 'error';exit

【问题讨论】:

还打印到 STDOUT;模具打印到 STDERR 哦。我刚刚意识到,虽然现在不重要,但以后会很重要。谢谢。 @ysth 【参考方案1】:

在die 错误消息中添加换行符会抑制添加的行号/脚本名措辞:

die "Error\n"

【讨论】:

【参考方案2】:

你可以在 die 字符串后追加一个新行,以防止 perl 添加行号和文件名:

die "oh no!\n" if condition;

或者写一个函数:

sub bail_out print @_, "\n"; exit

bail_out 'oh no!' if condition;

还请记住,die 打印到标准错误,而print 默认为标准输出。

【讨论】:

看来我必须编写自己的函数,因为它必须写入标准输出。 (我知道我最初并没有说明这一点,但我只是意识到我想避免行号的唯一时间是它打印到标准输出时)。 @George:你仍然可以使用 die【参考方案3】:

你可以使用相当自然的声音:

print "I'm going to exit now!\n" and exit if $condition;

如果您有 perl 5.10 或更高版本并添加例如use 5.010; 到你的脚本顶部,你也可以使用say,以避免自己添加换行符:

say "I'm going to exit now!" and exit if $condition;

【讨论】:

请注意,万一打印失败,程序不会退出。最好说“print(...), exit if $condition;”。 @Sean 请注意,该示例中print 后面的括号是必需的,否则它将退出而不打印任何内容。【参考方案4】:

这是您在对 Eric 的评论中完成的问题的答案。

要同时进行(打印 STDOUT 和不带行号的打印),您仍然可以通过更改 __DIE__ 处理程序来使用 die

$SIG__DIE__ = sub  print @_, "\n"; exit 255 ;

die "error" if $problem;

【讨论】:

【参考方案5】:

您可以使用sprintf 创建复杂的消息:

die sprintf( ... ) if $problem;

【讨论】:

您可能需要单击此答案上的[delete] 链接。

以上是关于Perl 内置退出并在一个命令中打印的主要内容,如果未能解决你的问题,请参考以下文章

如果单词退出,则删除行并在powershell中打印具有两个单词的行之间的所有行

在 Perl 中从 STDIN 捕获退出状态

为啥此命令无法打印 Python 命令的正确退出代码?

Shell命令的退出状态及错误检查

表单执行串口命令并在5秒后退出

打印fifo内容并退出