【问题标题】:Why does @my_array = undef have an element?为什么@my_array = undef 有一个元素?
【发布时间】:2009-06-17 13:10:29
【问题描述】:
@my_array = undef;
if (@my_array ) {  
    print 'TRUE'; 
} else {
    print 'FALSE';
}

这将打印TRUE

为什么数组有元素?

【问题讨论】:

    标签: perl arrays


    【解决方案1】:

    数组有一个元素,因为您分配了一个。考虑以下几点:

    @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
    

    【讨论】:

    • 旁注:对于标量变量 $p = undef 和 undef $p 是等价的。
    【解决方案2】:

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

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

    definedundef 适合 测试和设置标量。不要尝试 不过,它们带有数组。目前, defined(@array) 如果 Perl 返回 true 已为阵列分配存储空间 奇怪且没用的东西 对于普通程序员。返回 一个数组到它的初始状态,我们说:

    @array = ();        # good
    

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

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

    【讨论】:

      【解决方案3】:

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

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

      @my_array = ();
      

      【讨论】:

      • 或者,您可以执行“undef @my_array”
      • 或 $#my_array = -1;。或拼接(@my_array,0,@my_array);.
      • @Ysth:我很好奇:为什么不直接拼接@my_array?来自 perldoc -f splice:“如果 OFFSET 和 LENGTH 都被省略,则删除所有内容。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多