推荐答案
测试一下
题目
10 undef 值
参考答案与知识点
参考答案
通常不会有什么严重的后果 。变量在第一次赋值前有一个特殊值 undef,按
照Perl来说就是 :“这里什么也没有 ,请继续”。如果这里的 “什么也没有 ”是一些“数字”,则表现为 0。如果是“字符串”,
则表现为空串 。但undef既非数字也非字符串 ,它是另一种标量类型 。
由于 undef在需要数字的地方可以自动转化为 0,因此可以如下 的写代码 :
#将一些基数相加
#n = 1;
while($n < 10){
$sum += $n;
$n +=2;#下一个奇 数
}
print “The total was $sum. \n”;
上述代码在 $sum未初始化 (undef)时也能正确执行 。第一次执行时 ,循环体中第一行 $n值为 1,因此将 1加给 $sum。而$sum
就像已经有值 0,因为 $sum值为 undef。现在其值 1。之后,由于其已被初始化 ,其过程同普通的类似 。
同样的,针对字符串的情形 :
$string .= “more t ext\n” ;
如果 $string为undef;则是空串后接 “more text \n”。反之,则是其值后接 “more text \n”。
Perl程序员在使用新变量时 ,经常不初始化 ,从而将变量作为 0或者空串使用 。
许多操作当参数不恰当时返回 undef。如果没做特殊处理 ,通常会得到 0或者空串 。实践中,这几乎不会有什么问题 。实际
上,许多程序员利用这种性质 。但应当知道如果警告是打开的 ,那Perl在你不恰当的使用未定义值时会提醒你 。例如,将
一个 undef的变量赋给另一个变量不会有什么问题 ,但如果 print某个未定义的值则将引起警告 。
Perl语言入门 (第四版 )
blei@163.com 37/201 9/21/20062.1.1 defined 函数
能返回 undef的操作之一是行输入操作 ,<STDIN> 。通常,它会返回文本中的一行 。但如果没有更多的输入 ,如到了文件
的结尾,则返回 undef◆。要分辨其是 undef还是空串 ,可以使用 defined函数,它将在为 undef时返回 false,其余返回 true。
◆事实上,从键盘输入 ,不会有 “end-of-file”,但其可重定向到文件中 再输入。或者用户可能输入某些键 ,而系统将其作为 end-of-file看待。
$madonna = <STDIN >;
If ($defined ($madonna)){
print “The input was $madonna ”;
}else{
print “No input available! \n”;
}
如果想声明自己的 undef值,可以使用 undef:
$madonna = undef ; #同$madonna 从未被初始化一样 。
涉及知识点
- Verilog变量默认值(wire Z, reg X)
- X态传播与仿真不确定性
- 综合对未初始化变量的处理
- 初始值设置与仿真规范