2011-01-19 69 views
1

這兩個陳述是否意味着同樣的事情?這兩個表述是否相同?

if ($host eq '') { 
    print "Host exists\n"; 
} 

而且

if (defined $host) { 
    print "Host exists\n"; 
} 
+0

這是一個什麼樣的問題? – SLaks 2011-01-19 00:23:53

回答

7

不,他們是不同的。一個是將$host與空字符串進行比較,另一個是檢查$host是否完全定義(並且可能有任何值)。

+0

我明白了,雖然他們是一樣的,因爲當我嘗試定義的部分時,它不起作用,我認爲我是我做錯了。感謝您的澄清。 – ianc1215 2011-01-19 00:38:14

4

如果$host"localhost",他們會有所不同。

+1

沒有主機只是指我的腳本中的一個變量。 – ianc1215 2011-01-19 00:35:33

+0

@Solignis:是的,如果變量`$ host`具有值「localhost」,那麼它將被定義,但不等於「」,所以這兩個語句將產生不同的結果。 – 2011-01-19 12:18:12

3

即使你改變了第一個:

if ($host ne '') ... 

兩種說法是不等價的,因爲你會看到,如果你跑了打開了警告,並留下$host不確定。

$ perl -we 'my $host; print $host ne "" ? "Hi\n" : "Lo\n";' 
Use of uninitialized value $host in string ne at -e line 1. 
Lo 
$ perl -we 'my $host; print defined $host ? "Hi\n" : "Lo\n";' 
Lo 
$ perl -we 'my $host = ""; print defined $host ? "Hi\n" : "Lo\n";' 
Hi 
$ perl -we 'my $host = ""; print $host ne "" ? "Hi\n" : "Lo\n";' 
Lo 
$ 

注意,其中一個答案是 「Hi」。空字符串是一個很好的值;它與undef不一樣。