[Bioperl-l] Format Validator

arshad mohammed arshad25 at gmail.com
Fri May 23 23:36:54 EDT 2008


Hi All,

I am putting some effort to write a sub module to validate bio sequences, as
my  first  attempt to contribute something to bioperl.
It is quite premature as it can validate only FASTA format at this stage. I
would really like to have some feedback from all of you guys to improve and
bioperlify it.
Following is the module and the snippet how to use it.

##############################
#############################
##FormatValidator.pm

package FormatValidator;
use strict;
use Carp;
use warnings;
use version;
our $VERSION = qv('0.0.1');

#I am a poor constructor with no attributes
sub new
{
 my ($class) = @_;

 my $object = bless {}, $class;
 return $object;
}

#I will check if the sequence satisfy rules of "Fasta" and if it is, I will
return "1"
sub is_fasta
{
 my ($self, $file) = @_;
 return 0 if !defined $_[1];

 #I am not sure the user passed in a "File-Handler" or an "Array reference".
 #I am flexible enough to read the data from both. So I will make sure
 #what actually the user passed in and read it accordingly with the help of
my bro "readfile".
 my @file_data = $self->readfile($file);
 for (@file_data)
 {
  if ($_ =~ /^>/)
  {

   #Bang!! This is the only identifier I know 'bt FASTA, so no point in
further reading
   return 1;
  }
  else
  {
   return 0;
  }
 }
 return undef;
}

#I will Read the file data from either File Handler or Array and pass it to
the caller
sub readfile
{
 my ($self, $file) = @_;

 #If it is file Handler
 if (ref($file) eq 'IO::Handle')
 {
  my @file = <$file>;
  return @file;
 }

 #Or if it is Array reference
 elsif (ref($file) eq 'ARRAY')
 {
  return @{$file};
 }

 #If it is anything else
 else
 {
  carp "I can read only Array reference or File Handler, But this is
something else !\n";
  return;
 }
}

1;
##################################
##################################

#test.pl

use FormatValidator;
use strict;
open FH, '<test.txt' || die "couldnt Open"; # sequence  file
my $validator = FormatValidator->new();

#pass either file handler
if ($validator->is_fasta(*FH{IO}))
{
 print "Its a FASTA..\n";
}
else
{
 print "Its not a FASTA\n";
}
close FH;

# or the array reference of the file content
open FH, '<test.txt' || die "couldnt Open";
my @file_data = <FH>;
if ($validator->is_fasta(\@file_data))
{
 print "Its a FASTA..\n";
}
else
{
 print "Its not a FASTA\n";
}

#Test for an invalid condition
my $invalid = $validator->is_fasta($validator);

if (!defined $invalid)
{
 print "DIE..\n";
}
else
{
 print "Something Wrong in my module";
}

Perl ly
Arshad Mohammed
-- 
                 \\\|///
                \\ - - //
               ( @ @ )
--------o00o-(_)-o00o-----------


More information about the Bioperl-l mailing list