这两个陈述是否意味着相同的事情?
if ($host eq '') {
print "Host exists\n";
}
和
if (defined $host) {
print "Host exists\n";
}
答案 0 :(得分:7)
$host
与空字符串进行比较,另一个是检查$host
是否已定义(并且可能具有任何值)。
答案 1 :(得分:4)
没有
如果$host
为"localhost"
,则它们会有所不同。
答案 2 :(得分: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
$
请注意,其中一个答案是"嗨"。空字符串是一个很好的值;它与undef
不一样。