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

为什么Perl不打印此消息并退出?,perl,Perl,好: 不正常:为什么以下打印错误没有出现 我知道if条件{action}。我只是想知道当前的问题。我怀疑您没有看到打印的错误,对吗?这是因为表达式print error&&exit被解释为print error&&exit。请尝试以下方法: my $login='anybody'; (print "error" && exit) if $login ne 'root'; 因为你写的是: 打印字符串“error”的计算结果和命令退出的结果 你可以写: do { print "er

好:

不正常:为什么以下打印错误没有出现


我知道if条件{action}。我只是想知道当前的问题。

我怀疑您没有看到打印的错误,对吗?这是因为表达式print error&&exit被解释为print error&&exit。请尝试以下方法:

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

因为你写的是:

打印字符串“error”的计算结果和命令退出的结果

你可以写:

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

但请不要:

有三个问题

你问的第一个问题是优先权问题

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

print "error" && exit if ...;
可能的修复方法:

print("error" && exit) if ...;
(print "error") && exit if ...;
print("error") && exit if ...;
print "error" and exit if ...;
第二个问题是退出取决于打印结果,这是不合适的。即使打印返回错误,也要退出

可能的修复方法:

print("error" && exit) if ...;
(print "error") && exit if ...;
print("error") && exit if ...;
print "error" and exit if ...;
第三个问题是,这是一种非常糟糕的报告错误的方法。应在STDERR上打印错误,并应使用非零退出代码。在这里工作会很好

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

什么不是OK?它做了一些意想不到的事?它抛出一个警告/错误?实际上,Brian,在Perl中是这样的。例如,我们使用openstuff | | die error进行各种错误检查,就像在bash脚本中一样。@Dan-我删除了注释,并将其移动到了一个答案中以进行全面解释。这是一个逻辑比较,它确实控制着事情是否被执行,但它仍然不是,然后这样做,特别是OP代码的编写方式。猜得好,但我们不应该猜。这个问题应该说得更清楚。IMHO…但是perldoc perlop说命名的一元运算符的优先级高于&&,所以它应该被解释为打印错误&&exit。@Dan-print不是命名的一元运算符。这是一个函数。@Dan,它是一个运算符,但它是一个列表运算符。一元表示单参数,所以print不是一元。列表运算符的值可以是非常高,也可以是非常低,这取决于您是在查看运算符的左侧还是右侧。列表运算符右侧的逗号在运算符之前求值。这应该是&&而不是我上一条评论中的逗号。我实际上删除了它,因为我觉得它太唐突了。我回过头来:为什么是的,我这么做了。不幸的是,我的大脑经常与我的手指不同步。没关系。这是一个狗狗世界,你必须用谷物攻击来解决一些问题。+1用于突出第二个问题,它从根源上解决了问题。Zaid指的是现在的第三个问题。