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

Ant*_*sov -4 perl

好:

my $login='anybody';
exit if $login ne 'root';
Run Code Online (Sandbox Code Playgroud)

不行:为什么下面不打印" error"?

my $login='anybody';
(print "error" && exit) if $login ne 'root';
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ach 10

因为你写的东西说:

"打印字符串'错误'的评估和命令退出的结果"

你实际上可以写:

((print "error\n") && exit) if $login ne 'root';
Run Code Online (Sandbox Code Playgroud)

但请不要.:)

  • 为"请不要"+1 (3认同)
  • 没关系.这是一个狗狗世界,你必须采取谷物攻击的一些东西. (2认同)

ike*_*ami 9

有三个问题.


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

print "error" && exit if ...;
Run Code Online (Sandbox Code Playgroud)

是相同的

print("error" && exit) if ...;
Run Code Online (Sandbox Code Playgroud)

可能的修复:

(print "error") && exit if ...;
print("error") && exit if ...;
print "error" and exit if ...;
Run Code Online (Sandbox Code Playgroud)

第二个问题是以结果exit为条件print,这是不合适的.即使print返回错误,也要退出.

可能的修复:

(print "error"), exit if ...;
print("error"), exit if ...;
Run Code Online (Sandbox Code Playgroud)

第三个问题是这是报告错误的一种非常糟糕的方式.应打印错误,STDERR并应使用非零退出代码.die会在这里工作得很好.

die "error" if ...;
Run Code Online (Sandbox Code Playgroud)


Ted*_*opp 7

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

do { print "error"; exit } if $login ne 'root';
Run Code Online (Sandbox Code Playgroud)

  • @Dan - `print`不是一个命名的一元运算符.这是一个功能. (2认同)