这两个陈述是一样的吗?

时间:2011-01-19 00:22:05

标签: perl

这两个陈述是否意味着相同的事情?

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

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

3 个答案:

答案 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不一样。