这做什么,我会就喜欢这段代码做了什么?
if (grep {/$dn/} @ad_sys) {
$is_system = 1;
}
但这总是返回1
。
if (grep $_ == $dn, @ad_sys) {
$is_system = 1;
}
第二块做什么?
这做什么,我会就喜欢这段代码做了什么?
if (grep {/$dn/} @ad_sys) {
$is_system = 1;
}
但这总是返回1
。
if (grep $_ == $dn, @ad_sys) {
$is_system = 1;
}
第二块做什么?
==
用于数字比较,如果需要字符串比较使用eq
。
为上下文扩展:在Perl中,任何字符串都可以隐式转换为数字。如果字符串以一个数字开始,那么数字就是结果,否则结果为0.所以像''foo'=='bar''这样的比较与'0 == 0'是一样的。如果你使用warings;'你会得到像'Argument'bar'这样的警告在数字eq(==)中不是数字,让你知道哪里出了问题。 – 2011-04-04 15:17:36
它过滤了列表@ad_sys中的那些元素,这些元素的数值为等于$ dn。 然后,如果结果不为空,则条件为真,并输入if块。
这两段代码有两点区别。
首先,正如其他人已经指出的那样,存在数值比较运算符的问题。
但其次,/ $ dn /检查$ _是否包含$ dn中的数据。 $ _ eq $ dn检查$ _是否等于$ dn。
这种差异可能会导致问题,例如,如果您的数据由从尚未被删除的文件中读取的行构成,以删除换行符。
如果您给出$ dn和@ad_sys的值,这可能很有帮助。 – Ingo 2011-04-04 13:12:27