比较两个正则表达式与If-Statement失败

时间:2011-10-13 13:17:46

标签: regex perl compare

我想在perl中比较两个正则表达式,但它失败了:

  

在数字eq< ==>中使用未初始化的值在[... datafile&行]。参数[不同的正则表达式!]在数字eq< ==>中不是数字[...]

当值尚未存在时,我想在数组中存储正则表达式。 因此,我将当前正则表达式(tmpvar)与数组中的所有元素进行比较。

一般情况下是否可行,还是我必须使用解决方法?

$pass = new String::Random;
my $array_counter=0;

my @regex_array = ();

push(@regex_array, $pass->randregex($regex_from_file));

#print "@regex_array";
$array_counter++;

while ($array_counter != $anzahl_regex)
{

    print $array_counter;
    my $tmpvar = $pass->randregex($regex_from_file);
    my $tmpcheck = 0;
    my $tmparraylength = scalar (@regex_array);

    for ($i=0; $i<= $tmparraylength ;$i++)
    {

        if ($tmpvar == $regex_array[$i]) # ERROR
        {
            $tmpcheck =1;
        }
    }



    if ($tmpcheck == 0) # es wurde kein duplikat gefunden
    {
        push(@regex_array,$tmpvar);
        $arraycounter++;
    }

    $arraycounter++;

}

3 个答案:

答案 0 :(得分:6)

==用于比较数字。使用eq比较字符串:

if ($tmpvar eq $regex_array[$i]) 

此外,您在for循环中超出regex_array的结尾:

for ($i=0; $i < $tmparraylength ;$i++)
              ^ this must not be <=

最后,你做的工作太多了。使用哈希,它会自动“删除重复的密钥”。

my %temp_hash;
while (scalar(keys %temp_hash) < number_of_things_you_want) {
  $temp_hash{$pass->randregex($regex_from_file)}++;
}
@regex_array = keys %temp_hash;

答案 1 :(得分:2)

请勿使用数字comparísson==使用字符串comparisson eq

请参阅perldoc.perl.org

上的文档

答案 2 :(得分:0)

如果要做的只是重复数组,这可能更合适:

{
    my %h;
    map { $h{$_} = 1 } @all_regex;
    @all_regex = keys %h;
}

请注意,它不会保留原始数组的顺序。