O grep
de Perl usa um bloco de código (*) e fornece os elementos da matriz como $_
ao bloco. /pattern/
corresponde implicitamente a $_
e podemos combinar as correspondências de padrão com &&
ou ||
. Então, isso deve funcionar:
my @foo = qw/abc cde efg ghi/;
printf("%s\n", join(" ", grep {/c/ || /e/} @foo));
printf("%s\n", join(" ", grep {/c/ && /e/} @foo));
O primeiro imprime os elementos de @foo
que têm c
ou e
, o segundo imprime o que tem os dois.
(* ou uma expressão, mas eu acho a sintaxe do bloco mais clara)
#my @gitLines = grep "$fld0" && $_ =~ "$sIP" && $_ =~ "$dIP" && $_ =~ "$fld5"} @gitFile;
Você está perdendo a chave de abertura aqui, e "$fld0"
por si só não testa nada, exceto o conteúdo de $fld0
.
#my @gitLines = grep /$fld0/ && /$sIP/ && /$dIP/ && /$fld5/, @gitFile;
Eu acho que isso deve funcionar, é o mesmo que a minha segunda linha, exceto com uma expressão e não um bloco. Mas talvez você quisesse ||
em vez de &&
?