2011-10-13 31 views
4

我想在Perl比較兩個正則表達式,但它失敗:在數字EQ < ==>比較兩個正則表達式爲一個IF語句失敗

使用未初始化值[...數據文件&行] 。參數[不同的正則表達式!]是不是在數字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++; 

} 

回答

6

==文檔是用來比較數字。使用eq比較字符串:

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

此外,你超越的regex_array年底在for循環:

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; 
2

不要使用數字comparísson==使用字符串comparisson eq

這裏查看perldoc.perl.org

+0

@TLP,你是對的。我沒有正確閱讀代碼。 – Axeman

0

如果你想要做的就是重複數據刪除陣列,這可能是更適合:

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

被告知,它不保留原始數組的順序。