gpt4 book ai didi

command-line - Perl6一线执行。主题如何更新?

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

从stdin一次执行一个内衬处理一次CSV线:

perl6 -ne 'my @a; $_.split(",").kv.map: {@a[$^k]+=$^v}; say @a; ENTER {say "ENTER"}; BEGIN {say "BEGIN"}; LEAVE {say "LEAVE"}; END {say "END"}';

输入:
1,1
1,1
^D

提供以下输出:
BEGIN
ENTER
1,1
[1 1]
1,1
[2 2]
LEAVE
END

在这里,我们可以看到一个衬板不是多次执行的块,因为ENTER和LEAVE移相器仅执行一次。

随着变量@a的累积,这是有道理的。如果一个衬板是一个块,则@a的值将每次重置。

我的问题是主题变量$ _如何更新?主题变量是一个Str(至少是$ _。^ name所说的)。如何在不重新输入块的情况下更新其值?

我想念什么?

最佳答案

当您添加-n时,它将在您的代码周围添加一个for循环。

您认为它添加了这样的内容:

for lines() {
# Your code here
}

编译器仅添加用于循环的抽象语法树节点,而无需实际添加块。

(
# Your code here
) for lines()

(它可能被解释为一个错误。)

要使其像第一个一样工作:

(             # -n adds this

-> $_ { # <-- add this

# Your code here

}( $_ ) # <-- add this

) for lines() # -n adds this

我尝试仅添加一个裸块,但是编译器添加循环的方式导致该方法不起作用。

通常, ENTERLEAVE的作用域为一个块 {},但如果没有一个块,它们的作用域也为"file"。

ENTER say 'ENTER file';
LEAVE say 'LEAVE file';
{
ENTER say ' ENTER block';
LEAVE say ' LEAVE block';
}

ENTER file
ENTER block
LEAVE block
LEAVE file

由于您的代码中没有任何块,因此所有内容都限定在"file"范围内。

关于command-line - Perl6一线执行。主题如何更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357410/

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