将零赋值给Perl中的标量变量

问题描述:

如何将0赋值给Perl中的标量变量? 我的代码:将零赋值给Perl中的标量变量

$x=0; 

if(!$x) 
{ 
    print "fail"; 
} 
else 
{ 
    print "pass"; 
} 

输出:失败

+0

您需要输入'pass' – ssr1012

+4

为什么你期待'0'是一个真正的价值?在Perl中它被视为错误。 – melpomene

+1

获得答案后,​​请不要更改您的问题。由于您的编辑,Sobrique的回答不再有意义,任何未来访问此页面的人都会对“!x”的来源感到困惑。这就是为什么你应该总是复制和粘贴你正在使用的确切代码,或者甚至更好,创建一个能够再现你的问题的[mcve]。 – ThisSuitIsBlackNot

打开use strict;use warnings;,它会告诉你,!x是错误的:

裸词 “X” 时不允许使用“严格潜艇“正在使用

它应该是! $x - 或者由我预先设定e,not $x

您应该总是use strict;use warnings 'all';

+5

这个“警告”全部来源于何处?我在这里看过几次(但从未“在野外”)。我一直使用'使用警告;'。 – melpomene

+0

@melpomene我们中的一些人做到了这一点,但不是我们所有人。例如,我不这样做。但是比平常更多的警告不会伤害到真正的。 – simbabque

+3

@simbabque奇怪的是,它们是相同的:你不会用''use warnings'all''(['perldoc warnings']](https://metacpan.org/pod/warnings#DESCRIPTION) :“*所有警告均通过这些*中的任一个在块中启用”)。 – melpomene

所以,它被分配,但你问Perl的错误问题。你问,“是$ x假?”并且因为Perl中的零等于false,所以Perl说的是真的。你想知道的是,$ x被赋值为零。

use strict; 
use warnings; 

my $x=0; 

if (not defined $x || $x != 0) { 
    print "fail"; 
} else { 
    print "pass"; 
} 

此打印pass

而且,正如我的同事们指出,经常使用use strict;use warnings;,当你这样做,你还需要在你的$x前加上一个my

希望能够澄清一些事情。