gpt4 book ai didi

linux - bash 中的这个 perl one liner 是如何工作的?

转载 作者:IT王子 更新时间:2023-10-29 01:02:50 24 4
gpt4 key购买 nike

我正在研究如何根据每个句子的长度对文件进行排序,然后我从 answer 中看到了这个片段

perl -ne 'push @a, $_ } { print sort { length $a <=> length $b } @a' input
^ ^

我测试了它并且它有效,但我不知道它是如何工作的!据我所知,语法是错误的。它有一个开放的右括号和一个非封闭的右括号,我已经标记了。
我真的很难弄清楚如何在 bash 中运行这样的 perl 命令
有人可以解释一下这个片段吗?

最佳答案

}{ 就是所谓的蝴蝶或 Eskimo greeting 1997 年由 Abigail 发现。

基本上它关闭了由 -n 开关强加的 while 循环,而 }{ 之后的内容在 while 循环之后被 block 执行。

这就是 perl 解析这一行的方式,

perl -MO=Deparse -ne 'push @a, $_ } { print sort { length $a <=> length $b } @a' input

LINE: while (defined($_ = <ARGV>)) {
push @a, $_;
}{ # <==here it is

print((sort {length $a <=> length $b;} @a));
}

更常见的方法是使用 END{} block 而不是 }{ 运算符:

perl -ne '
push @a, $_
END {
print sort { length $a <=> length $b } @a
}
' input

关于linux - bash 中的这个 perl one liner 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18815105/

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