我在一本名为'High-order Perl`的书中读到了这段代码,我只是不明白为什么要使用grep,但是如果我改成第一个语句,事情就会出错,有人可以解释一下吗一点点?感谢。
上下文:代码位于第6章和第5节的
中sub union {
my ($h, @s) = grep $_, @_;
return unless $h;
return $h unless @s;
node(head($h), promise {
union(@s, tail($h));
});
}
答案 0 :(得分:12)
my ($h, @s) = @_;
获取数组@_
的第一个值并将其放在$h
中,其余值放在@s
中。
my ($h, @s) = grep $_, @_;
获取第一个真值,并将其放入$h
和其他真值,并将其放入@s
。
perl中的真值是不是空字符串'',0或undef。
的东西答案 1 :(得分:2)
鉴于两个陈述之间的区别在于使用grep
函数,我建议您回答问题的好地方是阅读the documentation for grep
。< / p>
grep BLOCK LIST
grep EXPR,LIST
这与grep(1)及其相似,但不一样 亲戚们。特别是,它不限于使用常规 表达式。
评估LIST的每个元素的BLOCK或EXPR(本地设置
$_
到每个元素)并返回由这些元素组成的列表值 表达式求值为true的元素。在标量中 context,返回表达式为真的次数。