Apart from what
Laurent_R mentioned, this latest version won't tell you anything about what sort of unexpected stuff is showing up in the data (my version will do that). Maybe that's not important to you in this particular process, but when I have to work with defective or unreliable input, I find that it's very helpful to be able to see what's wrong with the data.
BTW, in case my last reply wasn't clear, here's what I was talking about:
#!/usr/bin/perl
use strict;
use warnings;
$/ = undef; # slurp-mode for input, just in case
while ( <> ) { # reads stdin or all file names in ARGV
s/\s+//g; # remove whitespace
my $content = $_; # keep a working copy
tr/ACGTacgt//d; # remove all acgt
if ( length() ) { # anything left?
print "$ARGV bad content: $_\n";
do_something_with_bad_data( $ARGV, $content );
} else {
print "$ARGV all clean!\n";
do_something_with_good_data( $ARGV, $content );
}
}
sub do_something_with_bad_data
{
my ( $filename, $data ) = @_;
# . . . fix it? report it to someone?
}
sub do_something_with_good_data
{
my ( $filename, $data ) = @_;
# . . . whatever you want to do
}