【发布时间】:2009-06-17 13:10:29
【问题描述】:
@my_array = undef;
if (@my_array ) {
print 'TRUE';
} else {
print 'FALSE';
}
这将打印TRUE
为什么数组有元素?
【问题讨论】:
@my_array = undef;
if (@my_array ) {
print 'TRUE';
} else {
print 'FALSE';
}
这将打印TRUE
为什么数组有元素?
【问题讨论】:
数组有一个元素,因为您分配了一个。考虑以下几点:
@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 中布尔值的更多信息,请参阅 What is Truth?。 (如果您来自其他语言,您可能会遇到其他一些惊喜,因此值得一读。)
这是文章中的一个关键点:
defined和undef适合 测试和设置标量。不要尝试 不过,它们带有数组。目前,defined(@array)如果 Perl 返回 true 已为阵列分配存储空间 奇怪且没用的东西 对于普通程序员。返回 一个数组到它的初始状态,我们说:@array = (); # good说
@array = undef就是说@array包含一个元素列表,其中 单个元素是标量值undef。这几乎不是我们的 想要。
另一个提示:使用 my 本地化您的变量:my @array = ( #whatever );
【讨论】:
在 Perl 中,undef 是一个有效值。您可以将一个(或任意数量)undefs 放入一个数组或列表中。
如果要删除数组的所有元素,请执行以下操作:
@my_array = ();
【讨论】: