in reply to grep flex
Wertert
I note that in your sub 'scan' above, you use the /i modifier on every element. Hence, this:
my $table = [ [qw(1 2 3)], [qw(a b d)], [qw(A D C)]] ; my $search_pattern = { 0=> 'a', 2 => 'c', }; sub findit { my $row = shift; my $pattern = shift; my $found = 0; my $key = lc(join '' => @{$row}[keys %{$pattern}]); $found = 1 if $key eq (join '' => values %{$pattern}); return $found; } my @found = grep {findit $_, $search_pattern, } @{$table};
Note this requires the order of elements in the search pattern hash to match the order in the table, i.e. you couldn't do { 2=>'C', 0=>'a'} without sorting on the keys.
|
|---|