perl语言中数组初始化为空和undef的不同

在perl语言中,undef是一个常用的用法,但是不等于空,不等于数值0,它只是表示现在声明了这个变量,但是值还没有分配而已。

网上介绍undef的内容很多,这里我们只是比对一下对于一个数组,开始设置为undef或者空的不同。

问题发现的背景就不说了,我们简化为如下:

  1. 声明或者定义一个数组,免得后面使用时出现告警
  2. 根据业务条件,筛选满足条件的元素,放入到数组中
  3. 将数组连接成一个字符串,并以,为分隔符,供后面使用
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         undefperl变量未初始化时的默认值。当这个未初始化的变量被当做整型来使用时,那么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值。 这对于判断一个已经建立的数组的每个元素是否已经定义非常有用。 到这里我还认为是对的,可是接着有句就不理解了: “注意:此函数作用不是判断某个变量是否已经定义,而是用来判断某个
undefdefined()函数 undef表示的像是数据库的"null"。它表示空,啥也没有,是完全未定义的。这不等于字符串的空,不等于数值0,它是另一种类型。 在某些时候,perl程序本该报错的时候(如使用未值的变量,参数越界,读取文件时到了文件结尾eof),perl实际上不会报错,而是返回undef。但如果开启了warnings功能,则这种类型的问题,某些情况下会给出warning信息...