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