【发布时间】:2013-06-25 12:38:03
【问题描述】:
请帮助我理解字符串相等的一个奇怪问题。 这是我正在谈论的代码:
my $test=undef;
foreach my $List (@o_descrL) {
if (!($test)) {
$test = defined($o_noreg)
? $descr_d eq $List
: $descr_d =~ /$List/i;
printf("$descr_d = $List\t\t==> $test\n");
}
}
很遗憾我没有写出来,但我必须理解它。 $List 始终是“SQL Server (C4)”,$descr_d 根据数组中的实际项目而变化。部分打印输出在这里:
Power = SQL Server (C4) ==>
SQL Server (C4) = SQL Server (C4) ==>
SNMP Service = SQL Server (C4) ==>
Network Connections = SQL Server (C4) ==>
如您所见,输出的第二行中的字符串是相等的。那么为什么$test 不是真的呢?
编辑:我打印了更多输出,发现当$descr_d eq $List 时,它等于,但如果$descr_d =~ $List 则不等于。您能否解释一下$test 变量的实际作用是什么?我不明白defined() ? : 在这里是什么意思。
EDIT2:对于字符串“SQL Server Agent”,脚本工作得很好,只有在附加(C4)时才会出现问题。很奇怪,不是吗?
【问题讨论】:
-
您没有提及
defined($o_noreg)是否为真。
标签: regex perl equality nagios