`my($ h,@ s)= @_;`和`my($ h,@ ss)= grep $ _,@ _之间的区别是什么?

oxn*_*xnz 2 perl grep

我在一本名为'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));
 });
}
Run Code Online (Sandbox Code Playgroud)

bol*_*lav 12

my ($h, @s) = @_;取阵列的第一值@_,并把它在$h和处于静止@s.

my ($h, @s) = grep $_, @_;获取第一个真值并将其放入$h其余的真值中并将其放入@s.

perl中的真值是不是空字符串'',0或undef的东西.