我有全球价值:
my $gPrevious ='';
# main();
func();
sub func {
my $localval = 52552;
if ($gPrevious != $localval) {
------------
x statements;
}
}
输出:
论证""数字ne(!=)第x行没有数字。
为什么我使用ne
运算符?
我在这里与空字符串进行比较。
答案 0 :(得分:2)
值undef
专门用于测试变量是否已定义。在将变量与数字进行比较时,将变量初始化为字符串会使此目的失效。
您应该保留$gPrevious
变量 undefined ,并在子程序中测试它。
喜欢这个
my $gPrevious;
func();
sub func {
my $localval = 52552;
unless (defined $gPrevious and $gPrevious == $localval) {
# x statements;
}
}
答案 1 :(得分:0)
使用'=='或'!='比较运算符需要两个数字。
如果两个中的一个是perl可以很容易地生成诸如“1”的数字的字符串,perl将执行您想要的操作并比较1。
但是:如果你将字符串或undef与'!='运算符进行比较,就会出现警告。
在你的情况下,我建议你只使用
$gPrevious = 0;
# ...
if ( $gPrevious != $local_val ){ #...
将摆脱警告并正常工作。
测试已定义是另一种可能性,而测试整数并非易事。
您可以使用eq代替,但这是有问题的,例如'1.0'ne'1'。
答案 2 :(得分:0)
Perl为字符串比较(eq / ne)和数字比较(== /!=)提供了两个独立的运算符。 LHS值必须与使用的运算符类型相匹配。在您的情况下,LHS是一个字符串,您使用数字运算符进行比较。因此,错误。