- 论坛徽章:
- 0
|
仙子姐姐,请教问题,大家谁看到谁帮我解惑
偶总结下Apile和flw说的:
"grep { @expr 1 } $num"
eval里的这一串,由于位于双引号里,变量都被内插了。
@expr本来是这样的:('$_ % 2 &&', '$_ % 3 &&', '$_ % 4 &&')
内插后变成一个字符串:$_ % 2 && $_ % 3 && $_ % 4 &&
然后这个字符串加上最后一位1:$_ % 2 && $_ % 3 && $_ % 4 && 1
其实最后的&& 1是多余的,因为条件表达式里,.. && 1就等同于..
这里加上1是为了最后那个&&不多余。
作者之所以这么做,可能是早版本的perl里没有join函数,所以就取这个巧了。
$_ % 2 && $_ % 3 && $_ % 4 && 1这串本来也没什么意义,但它作为grep的表达式就有意义了。grep的input这里就是一个数字$num,grep在表达式里计算时,会临时把$_设置为这个数字$num。这一串取余运算(%)下去,如果没有余数,其中某项就会返回0,由于整个串用&&(and)连起来,其中一项为0,那么整个表达式就是false了。
所以lz问的问题就有答案了,grep这里返回的结果只有2种:1或0。返回1的话,表示全部可以取余,它就是质数啦。返回0的话,说明至少有1项没有余数,故它非质数了。
关键是要理解变量内插,上述就容易看懂了,:p |
|