use Bio::SeqIO; use Bio::SearchIO; my $input = Bio::SeqIO->new(-format => 'fasta', -file => "inputseqs.fa"); my $output = Bio::SeqIO->new(-format => 'fasta', -file => ">translated.fa"); while(my $seq = $input->next_seq ){ my $id = $seq->id; # fwd strand for my $frame ( 0..3 ) { my $translated = $seq->translate($frame); $translated->id($id. "_F$frame"); $output->write_seq($translated); } # rev strand my $revcom = $seq->revcom; for my $frame ( 0..3 ) { my $translated = $revcom->translate($frame); $translated->id($id. "_R$frame"); $output->write_seq($translated); } $output->close(); } my $blastexe = "blastall -p blastp -d swissprot -e 1e-3 -i translated.fa -m 9"; open(my $fh => "$blastexe |" ) || die $!; my $blastparser = Bio::SearchIO->new(-format => 'blasttable', -fh => $fh); # now do something with this as a SearchIO object # if you wanted the full alignment details, change blasttable to 'blast' and remove the '-m 9' in the exe string. # OR `$blastexe -o result.BLASTP.tab`;