This sample Perl script is for submitting searches to a local wwwblast setup
#!/usr/bin/perl
use URI::Escape;
use LWP::Simple;
#
# usage: www_blast2.pl config_file
#
# Sample input config_file format for www_blast2.pl:
# --cut content between this and the -end line --
# query|cross_sp1.faa
# db|refseq_protein
# program|blastp
# expect|0.01
# filter|L
# view|9
# output_file|www_cross_sp1.output
# --end--
# query specifies input query sequence file
# db specifies the target database
# program specifies the program to use
# expect specifies the expect value cutoff
# filter specifies what filter string to use
# view specifies the alignment view
# output_file specifies the file result is to be saved in
#
my %params;
my ($seq, $query, $db, $program, $result, $output );
%params = read_params();
print "Read parameters. Getting sequences ... \n";
$seq = read_fasta (%params);
$params{'query'} = $seq;
print "Got fasta query. Sending it to search ...\n";
$result = put_url(%params);
$output = $params{"output_file"};
open (OUT, ">$output") || die "Cannot open $output: $!\n";
print OUT $result; close (OUT);
print "Done, output in $output\n";
#**********************************************************
# Reads input parameters from file supplied on command line
# Input file must have lines of the following format:
# parameter|value
# where parameter is the URL parameter name and value is the
# value to be assigned to parameter
# Output: %params; keys are parameter names, values are values
# Example: $params{'program'} = 'blastp'
#
sub read_params {
my ($param, $value);
my %params;
#
#check for correct command line syntax
#
if ($#ARGV != 0) { die "Usage: www_blast2.pl input_file\n"; }
#
#read input parameter file
#
open(INPUT, "<$ARGV[0]") || die "Aborting. Can't open $ARGV[0]\n";
while (<INPUT>) {
chomp;
($param, $value) = split(/\|/);
print STDERR "$param\t$value\n";
$params{$param} = $value;
print STDERR "$param\t$params{'program'}\n";
}
close INPUT; return (%params);
}
#**********************************************************
# reads fasta sequence from $params{'input_file'}
# each sequence is stored as an element in @seqs returns @seqs
#
sub read_fasta {
my %params = @_;
my ($seq, $file);
$file = $params{"query"};
open (INPUT, "<$file") || die "Can't open $file: $! \n";
while (<INPUT>) {
next if (/^\s*$/); #skips blank lines in the query file
$seq .= $_;
}
close(INPUT);
$seq = uri_escape ($seq);
return($seq);
}
#**********************************************************
# posts a single BLAST Put URL using the parameters in %params
# returns the result in required format.
#
sub put_url {
my %params = @_;
my ($base, $url, $result);
#for my $i( keys %params){
print STDERR "$i, $params{$i}\n"}
$base = "http://localhost/blast/blast.cgi?";
#
#The based URL for your setup may be different from this
#
$url = $base."PROGRAM=".$params{'program'}."&DATABASE=".$params{'db'}."&EXPECT=";
$url .= $params{"expect"}."&FILTER=".$params{"filter"}."&QUERY=".$params{"query"};
$url .= "&ALIGNMENT_VIEW=". $params{"view"};
$result = get ($url);
return $result;
}