my @target_files; my ( $imode, $omode ); opendir DIR, $dir or warn "Cannot open $dir $!"; if ( $cmd eq 'gzip' ) { @target_files = grep { !/\.gz$/ and -f "$dir/$_" } readdir DIR; $imode = "<"; $omode = ">:gzip"; } else { @target_files = grep /.\.gz$/, readdir DIR; $imode = "<:gzip"; $omode = ">"; } closedir DIR; for my $ifile ( @target_files ) { my $ofile; if ( $cmd eq 'gzip' ) { $ofile .= ".gz"; } else { $ofile =~ s/\.gz$//; } open( I, $imode, $ifile ) or die "$ifile: $!"; open( O, $omode, $ofile ) or die "$ofile: $!"; while() { print O } close I; close O; unlink $ifile; }