为什么Perl不打印此消息并退出?

时间:2011-12-27 04:36:59

标签: perl

行:

my $login='anybody';
exit if $login ne 'root';

不行:以下为什么不打印“error”?

my $login='anybody';
(print "error" && exit) if $login ne 'root';

我知道if(condition){action}。我只想知道当前的问题。

3 个答案:

答案 0 :(得分:10)

因为你所写的内容是:

“打印字符串'error'的评估和命令退出的结果”

你实际上可以写:

((print "error\n") && exit) if $login ne 'root';

但请不要。 :)

答案 1 :(得分:9)

有三个问题。


第一个问题,你问的问题,是优先问题之一。

print "error" && exit if ...;

相同
print("error" && exit) if ...;

可能的修复:

(print "error") && exit if ...;
print("error") && exit if ...;
print "error" and exit if ...;

第二个问题是exitprint的结果为条件,这是不合适的。即使print返回错误,您也希望退出。

可能的修复:

(print "error"), exit if ...;
print("error"), exit if ...;

第三个问题是,报告错误的方法非常糟糕。应在STDERR上打印错误,并应使用非零退出代码。 die在这里会很有用。

die "error" if ...;

答案 2 :(得分:7)

我怀疑你没有看到“错误”打印,对吗?那是因为表达式print "error" && exit被解释为print ("error" && exit)。试试这个:

do { print "error"; exit } if $login ne 'root';