2013-02-18 89 views
0

下面我有一個while循環之後(字符串或數字)到一個數組:存儲值執行while循環

while (<>) 
{ 
    my $line = $_; 
    if ($line =~ m/ERROR 0x/) 
    { 
     $error_found +=1; 
    } 
} 

後while循環結束後,我將匹配出頭像「錯誤...」,我想將它們存儲到數組或列表或哈希中。我怎樣才能做到這一點?

回答

1

只要將數據推入數組。

my @errors; 
while (<>) 
{ 
    my $line = $_; 
    if ($line =~ m/ERROR 0x/) 
    { 
     push @errors, $line; 
    } 
} 

乾淨的東西了一點:

my @errors; 
while (my $line = <>) 
{ 
    if ($line =~ /ERROR 0x/) 
    { 
     push @errors, $line; 
    } 
} 

,或者甚至

my @errors; 
while (<>) 
{ 
    if (/ERROR 0x/) 
    { 
     push @errors, $_; 
    } 
} 

最後,實現grep將在這裏做的很棒:

my @errors = grep { /ERROR 0x/ } <>; 
+0

有一個錯字在第三個例子中,它應該是'$ _'而不是'$ line'。 – Toto 2013-02-18 09:30:11

+0

@ M42,感謝Borodin修復它。 – ikegami 2013-02-18 11:47:05

0
my @arr; 
while (<>) 
{ 
    my $line = $_; 
    if ($line =~ m/ERROR 0x/) 
    { 
     push(@arr,$line) ; 
    } 
} 

print "$_\n" for @arr;