@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
这将打印TRUE
为什么@my_array = undef有一个元素?
为什么数组有一个元素?
@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
这将打印TRUE
为什么@my_array = undef有一个元素?
为什么数组有一个元素?
该数组有一个元素,因为您分配了一个元素。考虑以下内容:
@array = undef; # Assigns the value 'undef' to @array
@array =(); # Assigns the empty list to @array
undef @array; # Undefines @array
它们看起来相似,但第一行与其他两个不同(它们是相同的)。第一行产生一个元素(数值为undef
)。另外两个导致一个空数组。在Perl中,undef
既是一个值又是一个运算符。第一行使用它作为值,最后一行使用它作为操作符。通常不需要清除数组。宣布时它们是空的:
my @array; # There's nothing in here, yet
在Perl中,undef
是一个有效的值。您可以将一个(或任意数量)的undef
放入数组或列表中。
如果你想删除一个数组的所有元素,这样做:
@my_array =();
更多关于在Perl布尔值见What is Truth?。 (如果您是从其他语言来了,你可能会在几个其他的惊喜,所以这是值得一读。)
下面是文章的关键位:
defined
和undef
都不错为 测试和设置标量。不过,不要尝试使用 。目前,defined(@array)
返回true,如果Perl 已分配存储阵列 东西是奇怪的,并没有用 给普通程序员。要返回 数组到初始状态,我们说:@array =(); # good
要说
@array = undef
是让@array
包含一个单元素列表,与 单个元素是标量值undef
。这几乎没有我们 想要的。
另一个提示:本地化您的变量my
:my @array =(#whatever);
或者,您可以执行“undef @my_array” – 2009-06-17 13:20:15
或$#my_array = -1 ;.或拼接(@ my_array,0,@ my_array);. – ysth 2009-06-17 14:52:35