gpt4 book ai didi

perl - 不寻常的 Perl 语法

转载 作者:行者123 更新时间:2023-12-03 23:14:19 26 4
gpt4 key购买 nike

我必须修改 Perl 脚本,这是我第一次尝试理解 Perl。我看到以下内容:

my %trades;
...
foreach my $row (@$rows) {
@{$trades{pop @$row}} = @$row;
}

我对此感到困惑,因为看起来我们正在弹出数组中的最后一项 @$row并设置 %trades的哈希键成为弹出的项目并将值设置为 @$row .

这种理解是否正确?

最佳答案

要理解那段代码,我们需要清楚三件事:

  • 评价顺序:
    EXPR_A = EXPR_B

    评估 EXPR_B评价前EXPR_A .
  • 复制语义:
    @new_array = @old_array

    复制 @old_array 的值转至 @new_array .
  • 复杂数据结构的解引用:
    @{ $trades{$key} }

    访问名为 $key 的条目在 %trades散列,并将其视为数组引用。

  • 总之,您的代码等效于:
    foreach my $row (@$rows) {
    my @copy = @$row;
    my $key = pop @$row;
    @{ $trades{$key} } = @copy;
    }

    (同时保留我能看到的所有副作用)

    所以例如
    $rows = [
    [1, 2, "keyA"],
    [3, 4, "keyB"],
    ];

    会创造
    %trades = (
    keyA => [1, 2, "keyA"],
    keyB => [3, 4, "keyB"],
    );
    $rows = [
    [1, 2],
    [3, 4],
    ];

    写那行的人对评估顺序有非常精确的了解,并且喜欢折磨维护程序员。

    关于perl - 不寻常的 Perl 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989046/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com