gpt4 book ai didi

perl - split inside map 是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 07:06:51 24 4
gpt4 key购买 nike

昨天我写了一个小子程序来解析我的 /etc/hosts 文件并从中获取主机名。

这是子程序:

sub getnames {
my ($faculty, $hostfile) = @_;
open my $hosts ,'<', $hostfile;
my @allhosts = <$hosts>;
my $criteria = "mgmt." . $faculty;
my @hosts = map {my ($ip, $name) = split; $name} grep {/$criteria/} @allhosts; # <-this line is the question
return @hosts;
}

我将其称为 getnames('foo','/etc/hosts') 并取回与 mgmt.foo 正则表达式匹配的主机名。

问题是,为什么我要在map表达式中单独写$name?如果我不写,把整行都拿回来。变量是否计算出它的值?

最佳答案

来自 map 的列表上下文结果是为每个匹配主机评估您的 block 的所有结果的串联。请记住, block 的返回值是最后计算的表达式的值,无论您的代码是否包含显式的 return。 .没有最后$name ,最后一个表达式——也就是 block 的返回值——是 split 的结果.

另一种写法是

my @hosts = map {(split)[1]} grep {/$criteria/} @allhosts;

你可以融合 mapgrep得到

my @hosts = map { /$criteria/ ? (split)[1] : () } @allhosts;

也就是说,如果给定的主机符合您的条件,则将其拆分。否则,该主机没有结果。

关于perl - split inside map 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10673059/

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