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

joe*_*joe 4 arrays perl

@my_array = undef;
if (@my_array ) {  
    print 'TRUE'; 
} else {
    print 'FALSE';
}
Run Code Online (Sandbox Code Playgroud)

这将打印 TRUE

为什么数组有元素?

Mic*_*man 25

该数组有一个元素,因为您分配了一个元素.考虑以下:

@array = undef;  # Assigns the value 'undef' to @array
@array = ();     # Assigns the empty list to @array
undef @array;    # Undefines @array
Run Code Online (Sandbox Code Playgroud)

它们看起来很相似,但第一行与其他两行不同(相当于).第一行导致数组具有单个元素(值undef).另外两个导致一个空数组.在Perl中,undef既是值又是运算符.第一行将其用作值,最后一行将其用作运算符.

通常不需要清除阵列.声明时它们是空的:

my @array;  # There's nothing in here, yet
Run Code Online (Sandbox Code Playgroud)

  • 旁注:对于标量变量,$ p = undef和undef $ p是等价的. (2认同)

Tel*_*hus 11

什么是真相?有关Perl中布尔值的更多信息.(如果你来自另一种语言,你可能会遇到其他一些惊喜,所以值得一读.)

这是文章中的一个关键点:

defined并且undef适用于测试和设置标量.但是,不要尝试使用数组.目前,defined(@array)如果Perl为数组分配了一些奇怪的东西并且对普通程序员没用,则 返回true.要将数组返回到其初始状态,我们说:

@array = ();        # good
Run Code Online (Sandbox Code Playgroud)

要说@array = undef@array 包含一个单元素列表,单个元素是标量值 undef.这几乎不是我们想要的.

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


j_r*_*ker 8

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

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

@my_array = ();
Run Code Online (Sandbox Code Playgroud)