perl语言中数组初始化为空和undef的不同
在perl语言中,undef是一个常用的用法,但是不等于空,不等于数值0,它只是表示现在声明了这个变量,但是值还没有分配而已。
网上介绍undef的内容很多,这里我们只是比对一下对于一个数组,开始设置为undef或者空的不同。
问题发现的背景就不说了,我们简化为如下:
-
声明或者定义一个数组,免得后面使用时出现告警
-
根据业务条件,筛选满足条件的元素,放入到数组中
-
将数组连接成一个字符串,并以,为分隔符,供后面使用
my @array_test = undef;
push @array_test,'aa';
push @array_test,'bb';
push @array_test,'cc';
push @array_test,'dd';
my $tmp_string = join ',', @array_test;
print "string: $tmp_string====";
这个时候打印出来的结果为:
string: ,aa,bb,cc,dd====
如果将undef一行修改为如下形式:
my @array_test = ();
这个时候打印出来的结果为:
string: aa,bb,cc,dd====
注意,这个时候的打印最前面并没有分隔符号(这里是,), 这个才是我们期望的结果。
从这里使用中可以看出,perl语言中的 undef 更多的类似于其它语言中对变量的一种声明,不能当做初始化来进行使用。
1.undef
undef是perl中变量未初始化时的默认值。当这个未初始化的变量被当做整型来使用时,那么undef就是0;当这个变量被当做字符串来使用时,那么undef就是空字符串。所以当在perl中使用一个未经过初始化的变量时,程序的运行是没有问题的。
$sum += 1; #该语句第一次被执行时,sum变量默认为0
2.defined函数
========== ========== ==========
[作者] (美) Joseph Albahari (美) Ben Albahari
[译者] (中) 陈昇 管学理 曾少宁 杨庆川
[出版] 中国水利水电出版社
[版次] 2013年08月 第1版
[印次] 2013年08月 第1次 印刷
[定价] 118.00元
========== =...
用法:函数defined返回0、false或者非0、true。
此运算结果依赖于传递给它进行计算的参数的内容。
如果参数中不含有字符和数字值,则返回0;如果参数中包含一个字符或者数字值,则返回非0或者true值。
这对于判断一个已经建立的数组中的每个元素是否已经定义非常有用。
到这里我还认为是对的,可是接着有句就不理解了:
“注意:此函数作用不是判断某个变量是否已经定义,而是用来判断某个
undef和defined()函数
undef表示的像是数据库中的"null"。它表示空,啥也没有,是完全未定义的。这不等于字符串的空,不等于数值0,它是另一种类型。
在某些时候,perl程序本该报错的时候(如使用未赋值的变量,参数越界,读取文件时到了文件结尾eof),perl实际上不会报错,而是返回undef。但如果开启了warnings功能,则这种类型的问题,某些情况下会给出warning信息...