为什么@my_array = undef有一个元素?

时间:2009-06-17 13:10:30

标签: perl arrays

@my_array = undef;
if (@my_array ) {  
    print 'TRUE'; 
} else {
    print 'FALSE';
}

这将打印TRUE

为什么数组有元素?

3 个答案:

答案 0 :(得分:25)

数组有一个元素,因为你分配了一个元素。请考虑以下事项:

@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

答案 1 :(得分:11)

有关Perl中布尔值的更多信息,请参阅What is Truth?。 (如果你来自另一种语言,你可能会遇到其他一些惊喜,所以值得一读。)

以下是文章的重点:

  

definedundef是有益的   测试和设置标量。别试试   但是,他们使用数组。目前,   如果Perl,defined(@array)返回true   已为阵列分配存储空间   一些奇怪而无用的东西   对普通程序员来说。回来   一个数组到它的初始状态,我们说:

@array = ();        # good
     

@array = undef@array   包含一个单元素列表   单个元素是标量值   undef。这几乎不是我们所做的   想。

另一个提示:使用my本地化您的变量:my @array =(#whatever);

答案 2 :(得分:8)

在Perl中,undef是有效值。您可以将一个(或任意数量)的undef放入数组或列表中。

如果要删除数组的所有元素,请执行以下操作:

@my_array = ();