2014-11-05 66 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是一個字符串,你正在使用數字運算符進行比較。因此,錯誤。