基本判断如下:0,‘0’,undef, ‘’(空字符串)都是假值。其他皆为真。
1.数组的尾部
判断是否遍历了整个数组,不能用数组的值判断,可以用foreach函数来遍历数组的元素,并跳过未定义的值:
foreach my $cat (@cats) ( next unless defined $cat; print "I have a cat names $ca\n"; )
不要把undef当成数组的最后一个元素,应该使用$#cats的写法获得数组的最后一个元素的下标。
2.散列值
假设%hash未定义,是个空散列。那么下边的几种方式测试都是假
my %hash; if ( $hash{'foo'} ) #假 if (defined $hash{'foo'}) #假 if (exists $hash('foo')) #假
一旦给某个键值赋了值,这个键也就存在了,哪个这个值代表的是假
$hash('foo')=undef; if($hash{'foo'}) #假 if(defined $hash{'foo'}) #假 if(exists $hash{'foo'}) #真
如果某个键的值明确,哪怕是个代表假的值,这个键对应的值也已经定义了。
$hash('foo')=‘’; if($hash{'foo'}) #假 if(defined $hash{'foo'}) #真 if(exists $hash{'foo'}) #真