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 && ?