我有一個全局值:比較空字符串編號爲
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