【问题标题】:consecutive operators and brackets连续运算符和括号
【发布时间】:2012-09-01 09:16:27
【问题描述】:

我只是想学习一点 Perl 并遇到了这个问题:

foreach $element (@{$records})
{
    do something;
}

在我的新手眼里,这写着: “对于名为 @{$records} 的数组中的每个元素,做一些事情” 但是,由于这似乎是一个不太可能的数组名称(完全是“@{$”),我想它不是那么简单吗?

我也遇到过“%$”一起使用的情况。 我知道% 表示散列,$ 表示标量,但不知道它们在一起是什么意思。

谁能解释一下这些?

【问题讨论】:

    标签: perl syntax operators brackets curly-brackets


    【解决方案1】:

    在 Perl 中,您可以拥有对数据结构的引用(指针):

    # an array
    my @array;
    
    # a reference to an array
    my $ref = \@array;
    

    当您拥有能够使用数组的引用时,您需要取消引用

    @{ $ref }
    

    如果你需要访问一个元素,如

    $array[0]
    

    你可以对参考做同样的事情

    ${$ref}[0]
    

    大括号{}是可选的,你也可以使用

    $$ref[0]
    @$ref
    

    但我个人觉得它们的可读性较差。

    这同样适用于所有其他类型(如 %$ 用于哈希引用)。

    详情请见man perlref,教程请见man perlreftut

    编辑

    箭头运算符-> 也可用于取消引用数组或哈希

    $array_ref->[0]
    

    $hash_ref->{key}
    

    详情请见man perlop

    【讨论】:

    • 我更喜欢使用$array->[0]访问数组引用中的单个元素
    • @LeonardoHerrera 谢谢(我完全忘记了,但值得一提,因为它被广泛使用,尤其是与哈希一起使用)。我更新了答案。
    • 3 或者是在给定数组引用时获取数组元素的 4 种方法。我想知道 Perl 6 中有多少? 3 种方式有点令人困惑。
    【解决方案2】:

    如果您有对数组或散列的引用,您将使用标量来保存引用:

    my $href = \%hash;
    my $aref = \@array;
    

    当您想取消引用这些引用时,您可以使用适合引用类型的符号:

    for my $element (@$aref) {
    }
    
    for my $key (keys %$href) {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 2017-12-05
      • 2016-12-02
      • 2021-01-09
      • 1970-01-01
      • 2012-05-08
      • 2015-02-17
      • 1970-01-01
      相关资源
      最近更新 更多