这段代码有什么作用?
这符合我的要求
if (grep {/$dn/} @ad_sys) {
$is_system = 1;
}
,但总是返回 1
。
if (grep $_ == $dn, @ad_sys) {
$is_system = 1;
}
第二块有什么作用?
This does what I would like it to
if (grep {/$dn/} @ad_sys) {
$is_system = 1;
}
but this always returns 1
.
if (grep $_ == $dn, @ad_sys) {
$is_system = 1;
}
What does the second piece do?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
==
用于数字比较,如果需要字符串比较则使用eq
。==
is used for numeric comparison, if you need string comparison useeq
.它从列表 @ad_sys 中过滤出数值等于 $dn 的元素。
然后,如果结果不为空,则条件为真并进入 if 块。
It filters those elements from the list @ad_sys that are numerically equal to $dn.
Then, if the result is not empty, the condition is true and the if-block is entered.
这两段代码之间有两个区别。
首先,正如其他人已经指出的那样,存在数字比较运算符的问题。
其次,/$dn/ 检查 $_ 是否包含 $dn 中的数据。 $_ eq $dn 检查 $_ 是否完全等于 $dn。
这种差异可能会导致问题,例如,如果您的数据包含从文件中读取的行,而这些行未被删除以删除换行符。
There are two differences between the two pieces of code.
Firstly, as others have pointed out already, there is the issue of the numeric comparison operator.
But secondly, /$dn/ checks to see if $_ contains the data in $dn. $_ eq $dn checks if $_ is exactly equal to $dn.
This difference could cause a problem, for example, if your data consisted of lines read from a file that hadn't been chomped to remove the newline.