這兩個陳述是否意味着同樣的事情?這兩個表述是否相同?
if ($host eq '') {
print "Host exists\n";
}
而且
if (defined $host) {
print "Host exists\n";
}
這兩個陳述是否意味着同樣的事情?這兩個表述是否相同?
if ($host eq '') {
print "Host exists\n";
}
而且
if (defined $host) {
print "Host exists\n";
}
不,他們是不同的。一個是將$host
與空字符串進行比較,另一個是檢查$host
是否完全定義(並且可能有任何值)。
我明白了,雖然他們是一樣的,因爲當我嘗試定義的部分時,它不起作用,我認爲我是我做錯了。感謝您的澄清。 – ianc1215 2011-01-19 00:38:14
號
如果$host
是"localhost"
,他們會有所不同。
沒有主機只是指我的腳本中的一個變量。 – ianc1215 2011-01-19 00:35:33
@Solignis:是的,如果變量`$ host`具有值「localhost」,那麼它將被定義,但不等於「」,所以這兩個語句將產生不同的結果。 – 2011-01-19 12:18:12
即使你改變了第一個:
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
不一樣。
這是一個什麼樣的問題? – SLaks 2011-01-19 00:23:53