[Bioperl-l] use Bio::SeqIO to read Fasta sequence from pipe, or @ARGV, like "while (<>) {....}"

Haiyan Lin linhy0120 at gmail.com
Mon Jul 14 05:26:49 UTC 2014


Thanks all reply and advice first.

I want to handle a single can handle data provided in two ways:

1)Read data from a file, such as "perl fastaLen.pl try.fa". No problem
for "-fh=>$filename". 

2)Read data from output of cmmand, such as "less try.fa | perl
fastaLen.pl". No probelm when using "-fh=>\*STDIN".


And, I can do this by first read data through <>, and write into a tmp
file, and
creat instance of Bio::SeqIO with "-fh=>\$tmpFile", then remove the tmp
file.  I'm looking for a way to avoiding writing/removing tmp file.

Thanks.

Haiyan






On Sun, 2014-07-13 at 15:12 +0000, Fields, Christopher J wrote:
> Haiyan,
> 
> Do you want a test script that uses the DATA handle or a script that can pull in data from STDIN (e.g. from outside)?  They are not the same.  It’s possible to do both but I think you’re conflating purposes here; someone using this script might not expect it to behave both ways.
> 
> chris
> 
> On Jul 12, 2014, at 9:23 PM, Haiyan Lin <linhy0120 at gmail.com> wrote:
> 
> > Hi, geogre,
> > 
> > Thanks your code is working for data embedded in code with "__DATA__".
> > But, it failed to hand data from outside. Following is the data and
> > result.
> > 
> > [linhy at bioinfo1 Script]$ more try.fa
> >> Contig000001
> > CCACGTAAGAGCACCTGGGTCCCCGCCCGCCAAGCGCCGCGAGCGCCAGCAGCAGCTCGC
> >> hello
> > ATATATTTTT
> > [linhy at bioinfo1 Script]$ cat try.fa | perl try.pl 
> > seq is AGAGAGAGA
> > seq is ATATATAT
> > 
> > Thanks
> > 
> > Haiyan
> > 
> > 
> > 
> > On Sat, 2014-07-12 at 18:36 -0700, george hartzell wrote:
> >> I just did this on my Mac OS X 10.9.4 system with perl 5.18.2:
> >> 
> >> cd tmp
> >> mkdir haiyan
> >> cd haiyan
> >> cpanm -n -L local Bio::SeqIO
> >> 
> >> perl -Ilocal/lib/perl5 foo.pl
> >> 
> >> With the following little program in foo.pl:
> >> 
> >> use Bio::SeqIO ;
> >> 
> >> my $in = Bio::SeqIO->new(-format=>"Fasta", -fh => \*DATA);
> >> while(my $s = $in->next_seq()){
> >>    print "seq is " . $s->seq . "\n"
> >> }
> >> 
> >> __DATA__
> >>> ct1
> >> AGAGAGAGA
> >>> ctg2
> >> ATATATAT
> >> 
> >> and it does this when I run it:
> >> 
> >> (alacrity)[18:22:58]haiyan>>perl -Ilocal/lib/perl5 foo.pl
> >> seq is AGAGAGAGA
> >> seq is ATATATAT
> >> (alacrity)[18:24:42]haiyan>>
> >> 
> >> Can you get the same series of things to work?
> >> 
> >> If you’re doing a bunch of this kind of stuff, you might want to look
> >> at Data::Section; rjbs discusses it
> >> here. It’s warmer and fuzzier than dealing with the DATA handle by
> >> yourself.
> >> 
> >> g.
> >> 
> >> ​
> > 
> > 
> > _______________________________________________
> > Bioperl-l mailing list
> > Bioperl-l at mailman.open-bio.org
> > http://mailman.open-bio.org/mailman/listinfo/bioperl-l
> 




More information about the Bioperl-l mailing list