代码之家  ›  专栏  ›  技术社区  ›  joe

为什么@my_array=undef有元素?

  •  4
  • joe  · 技术社区  · 15 年前
    @my_array = undef;
    if (@my_array ) {  
        print 'TRUE'; 
    } else {
        print 'FALSE';
    }
    

    这将打印 TRUE

    为什么数组有元素?

    3 回复  |  直到 15 年前
        1
  •  25
  •   Michael Carman    15 年前

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

    @array = undef;  # Assigns the value 'undef' to @array
    @array = ();     # Assigns the empty list to @array
    undef @array;    # Undefines @array
    

    它们看起来很相似,但第一行与其他两行不同(它们是等效的)。第一行的结果是数组中只有一个元素(值 undef )另外两个结果是一个空数组。在Perl, 解脱 同时是值和运算符。第一行将其用作值,最后一行将其用作运算符。

    通常不需要清除数组。声明时为空:

    my @array;  # There's nothing in here, yet
    
        2
  •  11
  •   Telemachus MrJames    15 年前

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

    这篇文章有一个关键点:

    defined undef 有益于 测试和设置标尺。不要尝试 不过,它们有阵列。目前, defined(@array) 如果Perl,则返回true 已为阵列分配存储 一些奇怪而无用的东西 普通程序员。归来 数组的初始状态,我们说:

    @array = ();        # good
    

    @array = undef 是为了 @array 包含一个元素列表,其中 单个元素是标量值 解脱 . 这几乎不可能是我们 想要。

    另一个技巧是:用 my :my@array=(随便什么);

        3
  •  8
  •   j_random_hacker    15 年前

    在Perl, undef 是有效值。你可以放一个(或任何数字) 解脱 到数组或列表中。

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

    @my_array = ();