Hi,
The trick is to print everything to a scalar ref.
For instance:
use 5.16.0;
use warnings;
use autodie;
use Data::Dumper;
use Bio::Tools::Run::RemoteBlast;
use strict;
my $prog = 'blastp';
my $db = 'swissprot';
my $e_val= '1e-10';
my $output; #result will be printed here
my @params = ( '-prog' => $prog,
'-data' => $db,
'-expect' => $e_val,
'-readmethod' => 'SearchIO' );
my $factory = Bio::Tools::Run::RemoteBlast->new(@params);
my $str = Bio::SeqIO->new(-file=>'test.fas' , -format => 'fasta' );
while (my $input = $str->next_seq()){
my $r = $factory->submit_blast($input);
while ( my @rids = $factory->each_rid ) {
foreach my $rid ( @rids ) {
my $result = $factory->retrieve_blast( $rid );
if ( ref( $result )) {
my $output = $result->next_result();
$factory->save_output( \$output ); #NOTE how a scalar ref is passed as a parameter, instead of a filename string.
$factory->remove_rid( $rid );
print "Result:",$output->query_name(),"\n";
}
}
}
}
say $output; #print result to STDOUT