My first module: Blaster.pm
nkuipers
nkuipers at uvic.ca
Mon Oct 21 14:44:07 CDT 2002
BLAST is not a perl tool. It's an exectuable in my path, freely downloadable
from ncbi.nih.gov ... a standard utility in bioinformatics at any rate. It
receives all 15k sequences and compares them one at a time to a database of
hundreds of thousands for similarity. It throws an exception for each
sequence where appropiate onto STDERR; none of the information is sensitive
and it doesn't really matter where it goes. I have a subroutine in my script
for handling error sequences specially anyway. Thanks for the pruning advice
too.
Cheers,
Nathanael
>===== Original Message From Peter Scott <Peter at PSDT.com> =====
>At 10:59 AM 10/21/02 -0700, nkuipers wrote:
>>Ok ok, I know this is silly of me, but I just wanted to show you all. Not
>>only does it compile, it works As Intended! :) However, I would like to
hear
>>any suggestions anyone has for improving it...after all, it's just my first.
>
>Well, you can save yourself a bit of typing; since bless returns the
>reference after blessing the referent, where you say
>
> bless ($self, $type) and return $self
>
>you can just say
>
> return bless ($self, $type);
>
>For that matter, you could replace the whole
>
> my $self = {
> TYPE => 'n,x,p etc.',
> DATABASE => 'some db',
> INPUT => 'some file',
> OUTPUT => 'some file',
> MODE => 'int(0-7)',
> EVALUE => 'some value',
> @_
> };
> bless ($self, $type) and return $self
>
>with
>
> bless {
> TYPE => 'n,x,p etc.',
> DATABASE => 'some db',
> INPUT => 'some file',
> OUTPUT => 'some file',
> MODE => 'int(0-7)',
> EVALUE => 'some value',
> @_
> }, $type
>
>But that's just pruning.
>
> if ( $argument eq 'n' or
> $argument eq 'p' or
> $argument eq 'x' or
> $argument eq 'tn' or
> $argument eq 'tx' ) { $caller->{TYPE} = $argument }
> else { die "Invalid -blast value: $!" }
>
>spells hash test to me:
>
> my %valid = map { $_ => 1 } qw(n p x tn tx);
> $valid{$argument} ? $caller->{TYPE} = $argument
> : die "Invalid -blast value: $argument";
>
>And you don't really want $! there... that's only for system call failures.
>
>sub blast {
> my $caller = shift;
> ref($caller) or die "Invoked instance method on a class: $!";
> print "Blasting against $caller->{DATABASE} database...\n";
> my $command = "blastall -p blast". $caller->{TYPE} .
> " -d " . $caller->{DATABASE} .
> " -i " . $caller->{INPUT} .
> " -o " . $caller->{OUTPUT} .
> " -m " . $caller->{MODE} .
> " -e " . $caller->{EVALUE};
> system $command;
>}
>
>I think I'd want to know whether this was successful. You've called
>system(), which means that the STDOUT and STDERR will go to the
>caller. Maybe that's right; I don't know what blast is. Usually one
>wants to hide the underlying details from the user since that's the
>encapsulation part of O-O.
>
>So unless this is an interactive program or it outputs messages that
>you are going to print anyway, I'd captur the stdout and stderr with ``
>and do some analysis on them to see whether they represented success or
>failure. Or maybe it's enough just to look at $? for the return code.
>
>--
>Peter Scott
>Pacific Systems Design Technologies
>http://www.perldebugged.com/
More information about the Victoria-pm
mailing list