sub grepit { my ( $fh, $keep ) = @_; my $new_fh; return $new_fh if my $pid = open $new_fh, '-|'; die "Fork failed: $!\n" unless defined $pid; my $re = ref $keep ? $keep : qr/\Q$keep/; /$re/ && print STDOUT while <$fh>; exit 0; } sub cols { my ( $fh, $sep, @cols ) = @_; my $new_fh; return $new_fh if my $pid = open $new_fh, '-|'; die "Fork failed: $!\n" unless defined $pid; print STDOUT join( $sep, ( split $sep )[ @cols ] ), "\n" while <$fh>; exit 0; }