14

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

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

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

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

4

5 回答 5

24

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

die "Error\n"
于 2011-02-21T18:16:44.697 回答
19

您可以在 die 字符串中附加一个新行,以防止 perl 添加行号和文件名:

die "oh no!\n" if condition;

或者写一个函数:

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

bail_out 'oh no!' if condition;

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

于 2011-02-21T18:17:06.177 回答
12

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

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

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

say "I'm going to exit now!" and exit if $condition;
于 2011-02-21T22:20:34.463 回答
1

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

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

$SIG{__DIE__} = sub { print @_, "\n"; exit 255 };

die "error" if $problem;
于 2011-02-24T22:02:10.980 回答
-4

您可以使用以下命令创建复杂的消息sprintf

die sprintf( ... ) if $problem;
于 2011-02-21T18:44:39.627 回答