undef表示的像是数据库中的"null"。它表示空,啥也没有,是彻底未定义的。这不等于字符串的空,不等于数值0,它是另外一种类型。shell
在某些时候,perl程序本该报错的时候(如使用未赋值的变量,参数越界,读取文件时到了文件结尾eof),perl实际上不会报错,而是返回undef。但若是开启了warnings功能,则这种类型的问题,某些状况下会给出warning信息,而不是返回undef。数据库
通常状况下,将其看成空或0就行了,由于在须要数值的时候,undef表明的就是0,须要字符串的时候,undef就是空字符串。bash
因此,perl中的彻底能够直接使用未定义的变量,由于未定义的变量起始就是undef。它能够被看成0,也可被看成空字符串。函数
例如,下面两个语句中,$sum和$str都是未定义的,初始时它们分别表示数值0和空字串''。code
$sum += $i; $str .= "abc";
能够直接将undef关键字赋值给某个变量,表示这个变量是undef的,这能够取消一个变量的定义。至关于bash shell中的unset。字符串
$line=undef;
若是想要判断这个undef确实是undef而不是字符串的空,能够使用defined()函数。若是是undef,则该函数返回false,不然返回true。变量
if(defined($ma)){ print "valid var\n"; }else{ print "invalid var\n"; # <--- 输出此行 }