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

George Hartzell hartzell at alerce.com
Mon Jul 14 13:24:52 UTC 2014

Haiyan Lin writes:
 > 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.

Paul suggested the use of -p to test whether STDIN is a pipe or not,
which stricly works to your specs.  I don't think it does what *I*
would expect if you redirect input from a file (foo.pl < moose.fa),
but that doesn't seem to be one of your requirements.

Alternatively, you could be more explicit about how it is supposed to
behave.  One thought would be to use an option on the command line to
specify the input file and use the name "-" to specify that program
should read from stdin.  There is a lot of unix tradition in that

Alternatively^2, you could specify the name of the input file on the
command line (with an option or without) and if no name was specified
then read from stdin.


More information about the Bioperl-l mailing list