我有一个全局值:比较空字符串编号为
my $gPrevious ='';
# main();
func();
sub func {
my $localval = 52552;
if ($gPrevious != $localval) {
------------
x statements;
}
}
输出:
论证 “” 是不是在直线x数值NE(=!)的数字。
为什么我要用ne
运算符?
这里我比较一个空字符串。
我有一个全局值:比较空字符串编号为
my $gPrevious ='';
# main();
func();
sub func {
my $localval = 52552;
if ($gPrevious != $localval) {
------------
x statements;
}
}
输出:
论证 “” 是不是在直线x数值NE(=!)的数字。
为什么我要用ne
运算符?
这里我比较一个空字符串。
值undef
是否存在特殊情况,以便您可以测试变量是否已被定义。当将一个变量与一个数字进行比较时,将一个变量初始化为一个字符串,而不是这个目的。
你应该让你的$gPrevious
变量undefined,并测试你的子程序。
像这样
my $gPrevious;
func();
sub func {
my $localval = 52552;
unless (defined $gPrevious and $gPrevious == $localval) {
# x statements;
}
}
使用 '==' 或 '!=' 比较运营商需要有两个数字。
如果这两个中的一个是一个字符串,Perl可以很容易地使一个数字,如“1”,PERL会做你想要什么,比较1
但如果你比较字符串或与UNDEF '!='操作符会出现警告。
在你的情况,我建议你只需使用
$gPrevious = 0;
# ...
if ($gPrevious != $local_val){ #...
这将摆脱的警告,做工精细。
测试定义是另一种可能性,而测试整数不是微不足道的。
您可以使用eq代替,但这是有问题的,例如'1.0'ne'1'。
Perl为字符串比较(eq/ne)和数字比较(== /!=)提供了两个单独的运算符。 LHS值必须与正在使用的操作员类型相匹配。在你的情况下,LHS是一个字符串,你正在使用数字运算符进行比较。因此,错误。
呃,因为'eq'是用于字符串比较的,''''是字符串吗? – rightfold 2014-11-05 09:52:58
在这里,我比较空数字与数字权利?它应该工作na ..为什么错误 – user3274607 2014-11-05 09:59:06
是一个数字?不,所以你不能将它与'!='进行比较。 – rightfold 2014-11-05 10:00:33