行:
my $login='anybody';
exit if $login ne 'root';
不行:以下为什么不打印“error
”?
my $login='anybody';
(print "error" && exit) if $login ne 'root';
我知道if(condition){action}。我只想知道当前的问题。
答案 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 ...;
第二个问题是exit
以print
的结果为条件,这是不合适的。即使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';