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 内置退出并在一个命令中打印的主要内容,如果未能解决你的问题,请参考以下文章