这个变量的价值是多少?

时间:2017-05-16 07:54:54

标签: perl variables

我必须对一些老的Perl代码进行故障排除,但我无法弄清楚$teilnehmer在此代码中的价值。

# Teilnehmer   einlesen
foreach ( $c = 0; $c <= @htmllines; $c++ ) {

    if ( $htmllines[$c] !~ /(<!--responses: $delkursnr-->0)/ ) {

        if ( $htmllines[$c] =~ /<!--responses: $delkursnr-->(.*)/ ) {
            $rspbegin = $c;
        }

        $teilnehmer = $_;
    }
}

2 个答案:

答案 0 :(得分:0)

$teilnehmer = $htmllines[$c]

这意味着:

 foreach ($c = 0;$c <= @htmllines;$c++) {
    if ($htmllines[$c] !~ /(<!--responses: $delkursnr-->0)/) {
        if ($teilnehmer = $htmllines[$c] =~ /<!--responses: $delkursnr-->(.*)/){
            $rspbegin = $c;
        };
    }
}

它与:

相同
moment

有关$ _的更多信息,请访问Google

答案 1 :(得分:0)

已经完成了一段时间,因为我已经完成了Perl,但是我没有在这里安装它,所以我无法对其进行测试。

似乎代码应该在@htmllines中找到满足某些正则表达式相关条件的最后一个元素,并将数组元素存储到变量$teilnehmer中,并将其在数组中的索引存储到变量$rspbegin。请注意,循环中的特定迭代可能会设置$teilnehmer的值,但不会设置$rspbegin的值。因此它们实际上并不对应于数组中的同一条目。

此外,循环以$c <= @htmllines为界。这意味着循环将在数组结尾之后最后一次使用$htmllines[$c] = undef运行。我不知道外部的if块将如何处理它,因为它是负的正则表达式匹配项。如果否定匹配返回false,则这不是问题-它将忽略这种情况。但是,如果返回真值,则$teilnehmer将设置为undef。这是循环的最后一次迭代,因此以后不会覆盖该值。

另一件事:$delkursnr的值是什么?它是否包含任何正则表达式特殊字符?正则表达式的特殊字符如下:^$()[].?*+{}|\ ...我可能已经错过了一些。 (不过,{/-应该没问题。)如果正则表达式中有特殊字符,则应在正则表达式中用$delkursnr替换正则表达式中的\Q$delkursnr\E。参见https://perldoc.perl.org/perlre.html#Quoting-metacharacters