my $grep_filters = [ { 'sub' => sub { my ($line) = shift @_; return $line if $line =~ /,SEVERE,/; }, }, { 'sub' => sub { my ($line) = shift @_; return $line if $line =~ /192\.168\.200\.|10\.10\.200/; return undef; }, }, ]; while(<$FILE>){ foreach my $my_filter_fn (@$filters){ my $return = $my_filter_fn->{'sub'}->($_); push(@return_array,$return) unless not defined $return; } }