2014-11-05 68 views
0

我有一个全局值:比较空字符串编号为

my $gPrevious =''; 

# main(); 
func(); 

sub func { 
    my $localval = 52552; 

    if ($gPrevious != $localval) { 
     ------------ 
    x statements; 
    } 
} 

输出:

论证 “” 是不是在直线x数值NE(=!)的数字。

为什么我要用ne运算符?

这里我比较一个空字符串。

+2

呃,因为'eq'是用于字符串比较的,''''是字符串吗? – rightfold 2014-11-05 09:52:58

+0

在这里,我比较空数字与数字权利?它应该工作na ..为什么错误 – user3274607 2014-11-05 09:59:06

+0

是一个数字?不,所以你不能将它与'!='进行比较。 – rightfold 2014-11-05 10:00:33

回答

2

undef是否存在特殊情况,以便您可以测试变量是否已被定义。当将一个变量与一个数字进行比较时,将一个变量初始化为一个字符串,而不是这个目的。

你应该让你的$gPrevious变量undefined,并测试你的子程序。

像这样

my $gPrevious; 

func(); 

sub func { 
    my $localval = 52552; 

    unless (defined $gPrevious and $gPrevious == $localval) { 
    # x statements; 
    } 
} 
0

使用 '==' 或 '!=' 比较运营商需要有两个数字。

如果这两个中的一个是一个字符串,Perl可以很容易地使一个数字,如“1”,PERL会做你想要什么,比较1

但如果你比较字符串或与UNDEF '!='操作符会出现警告。

在你的情况,我建议你只需使用

$gPrevious = 0; 
# ... 
if ($gPrevious != $local_val){ #... 

这将摆脱的警告,做工精细。

测试定义是另一种可能性,而测试整数不是微不足道的。

您可以使用eq代替,但这是有问题的,例如'1.0'ne'1'。

0

Perl为字符串比较(eq/ne)和数字比较(== /!=)提供了两个单独的运算符。 LHS值必须与正在使用的操作员类型相匹配。在你的情况下,LHS是一个字符串,你正在使用数字运算符进行比较。因此,错误。