~/www/BioPerl/Blast/remote_blast.pl.html
#!/usr/bin/perl -w
use Bio::SeqIO;
use Bio::Tools::Run::RemoteBlast;

my $Seq_in = Bio::SeqIO->new (-file => $ARGV[0], -format => 'fasta');
my $query = $Seq_in->next_seq();

my $factory = Bio::Tools::Run::RemoteBlast->new(
        '-prog'  => 'blastp',
        '-data' => 'swissprot',
        _READMETHOD => "Blast"
        );

my $blast_report = $factory->submit_blast($query);
while ( my @rids = $factory->each_rid ) {
    print STDERR "waiting...\n" ;

    # RID = Remote Blast ID (e.g: 1017772174-16400-6638)
    foreach my $rid ( @rids ) {
        my $rc = $factory->retrieve_blast($rid);
        if( !ref($rc) ) {
            if( $rc < 0 ) {
                # retrieve_blast returns -1 on error
                $factory->remove_rid($rid);
            }
            # retrieve_blast returns 0 on 'job not finished'
            sleep 5;
        } else {

            #---- Blast done ----
            $factory->remove_rid($rid);
            my $result = $rc->next_result;
            print "database: ", $result->database_name(), "\n";
            while( my $hit = $result->next_hit ) {
                print "hit name is: ", $hit->name, ", ", $hit->significance, " ";
                while( my $hsp = $hit->next_hsp ) {
                    print "(", $hsp->score, ") ";
                }
                print "\n";
            }
        }
    }
}