2016-07-14 4 views
0

Unten ist der Code, der tatsächlich ein Muster in einem Perl-Array findet.grep mehrere Muster in Perl-Array zu einer Zeit

my $isAvailable = grep { $_->[0] eq '12345' } {$filteredTableEntriesMap{$REPORT_PART1}} ; 

Aber ich möchte für zwei Muster in zwei Indizes zu einer Zeit

my $isWiuAvailable = grep { $_->[0] eq '12345' }  @{$filteredTableEntriesMap{$REPORT_PART1}} ; 
my $isBsAvailable = grep { $_->[1] eq '6789' } @{$filteredTableEntriesMap{$REPORT_PART1}} ; 

Dies ist suchen, wie die Karte

$VAR1 = { 
     'REPORT PART2' => [], 
     'REPORT PART1' => [ 
           [ 
           '12345', 
           '6789',       
           ], 
           [ 
           '343435', 
           '315', 
           ], 
           [ 
           '00103', 
           '000315', 

           ], 
         ] 

vertreten ist, und ich möchte ein anzupassen Array, das diese beiden Einträge in Index 1 und Index 2 hat

Dank

Antwort

2

Sie können die beiden Bedingungen in einem Ausdruck kombinieren.

my @found = grep { $_->[0] eq '12345' && $_->[1] eq '6789' } 
    @{$filteredTableEntriesMap{$REPORT_PART1}}; 

Der Stoff im Inneren des {} für grep ist im Grunde eine Subroutine. Sie können dort so viel tun, wie Sie möchten, solange Sie einen wahren Wert zurückgeben, wenn Sie $_ in Ihrem @found Ergebnis behalten möchten.