gpt4 book ai didi

perl - 有谁知道如何理解这种 Perl 代码块?

转载 作者:行者123 更新时间:2023-12-04 13:13:32 27 4
gpt4 key购买 nike

我对 Perl 命名 block 感到困惑(我认为它们是......)。下面是一个例子:

#!/usr/bin/perl

sub Run(&){
my ($decl) = @_;
$decl->();
}

sub cmd(&){
my($decl) = @_;
my(@params) = $decl->();
print "@params\n";
}
sub expect(&){
my ($decl) = @_;
my(@params) = $decl->();
print "@params\n";
}

Run {
cmd { "echo hello world " };
expect { exit_code => 0, capture => 2};
};

注意最后几行。看起来“Run”、“cmd”、“expect”是命名 block ,而不是函数。有谁知道它们是什么?任何可用的链接介绍它们?
我找不到这种语法的任何引用。

最佳答案

让我们解读 Run 的这个定义。 :

sub Run(&){
my ($decl) = @_;
$decl->();
}

这意味着子程序调用 Run ,它接受类型为 CODE 的参数(这就是它使用 (&) 的原因)。在里面 $decl被分配给该传递的代码,该代码被 $decl->(); 调用.

现在,您的示例中的最后几行:
Run {
cmd { "echo hello world " };
expect { exit_code => 0, capture => 2};
};

相当于:
Run(sub {
cmd { "echo hello world " };
expect { exit_code => 0, capture => 2};
});

换句话说,它调用 Run带有大括号中的匿名过程代码。

关于perl - 有谁知道如何理解这种 Perl 代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526885/

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