<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body ><div>Hi,paul,</div><div><br></div><div>That is what I want. Thank you for you advice and kind reminding on how to&nbsp;</div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;">ask for help. I will remember. Thanks and wishes to all again.</span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;"><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;"><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;">Haiyan&nbsp;</span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;"><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px;"><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px; "><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px; "><br></span></div><div><span class="Apple-style-span" style="color: rgb(87, 87, 87); font-size: 8.25px; ">从三星手机发送</span></div><br><br><br>-------- 原始邮件 --------<br>发件人: Paul Cantalupo &lt;pcantalupo@gmail.com&gt; <br>日期: 2014-07-14  PM 8:50  (GMT+08:00) <br>收件人: Haiyan Lin &lt;linhy0120@gmail.com&gt; <br>抄送: Bioperl-l@mailman.open-bio.org <br>主题: Re: [Bioperl-l] use Bio::SeqIO to read Fasta sequence from pipe, or @ARGV, like "while (&lt;&gt;) {....}" <br> <br><br><div dir="ltr"><div><div>Hi Haiyan,<br><br></div>Ah your specifications are now clearer! I use the '-p' file test to check if STDIN is a named pipe (<a href="http://perldoc.perl.org/functions/-X.html">http://perldoc.perl.org/functions/-X.html</a>) to do the same thing that you are trying to do:<br>
<br><span style="font-family:courier new,monospace">use strict;<br>use warnings;<br>use Bio::SeqIO;<br>my $in;<br>if (-p STDIN) {<br>&nbsp; $in = Bio::SeqIO-&gt;new(-fh =&gt; \*STDIN, -format =&gt; 'fasta');<br>}<br>else {<br>
&nbsp; $in = Bio::SeqIO-&gt;new(-file =&gt; shift);<br>}<br>while (my $seq = $in-&gt;next_seq) {<br>&nbsp; print $seq-&gt;length,"\n";<br>}<br><br></span><br>Here is my input file and results when running both ways:<br><br>
<span style="font-family:courier new,monospace">$ cat foo.fa<br>&gt;foo1<br>tgtagtc<br>&gt;foo2<br>taaaacgtgtcat<br><br>$ cat foo.fa | <a href="http://both.pl">both.pl</a><br>7<br>13<br><br>$ <a href="http://both.pl">both.pl</a> foo.fa<br>
7<br>13</span><br><br></div><div>Hope this helps, <br><br>Paul<br></div><div><br><br></div><div>P.S. Next time you ask a question, your reply to Chris Fields is exactly how you should ask a question. It will enable us to better help you&nbsp;&nbsp; ;)<br>
<br><br></div><br><br><br></div><div class="gmail_extra"><br clear="all"><div>Paul Cantalupo<br>University of Pittsburgh<br></div>
<br><br><div class="gmail_quote">On Mon, Jul 14, 2014 at 1:26 AM, Haiyan Lin <span dir="ltr">&lt;<a href="mailto:linhy0120@gmail.com" target="_blank">linhy0120@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks all reply and advice first.<br>
<br>
I want to handle a single can handle data provided in two ways:<br>
<br>
1)Read data from a file, such as "perl fastaLen.pl try.fa". No problem<br>
for "-fh=&gt;$filename".<br>
<br>
2)Read data from output of cmmand, such as "less try.fa | perl<br>
fastaLen.pl". No probelm when using "-fh=&gt;\*STDIN".<br>
<br>
<br>
And, I can do this by first read data through &lt;&gt;, and write into a tmp<br>
file, and<br>
creat instance of Bio::SeqIO with "-fh=&gt;\$tmpFile", then remove the tmp<br>
file. &nbsp;I'm looking for a way to avoiding writing/removing tmp file.<br>
<br>
Thanks.<br>
<span class="HOEnZb"><font color="#888888"><br>
Haiyan<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
On Sun, 2014-07-13 at 15:12 +0000, Fields, Christopher J wrote:<br>
&gt; Haiyan,<br>
&gt;<br>
&gt; 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)? &nbsp;They are not the same. &nbsp;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.<br>

&gt;<br>
&gt; chris<br>
&gt;<br>
&gt; On Jul 12, 2014, at 9:23 PM, Haiyan Lin &lt;<a href="mailto:linhy0120@gmail.com">linhy0120@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; Hi, geogre,<br>
&gt; &gt;<br>
&gt; &gt; Thanks your code is working for data embedded in code with "__DATA__".<br>
&gt; &gt; But, it failed to hand data from outside. Following is the data and<br>
&gt; &gt; result.<br>
&gt; &gt;<br>
&gt; &gt; [linhy@bioinfo1 Script]$ more try.fa<br>
&gt; &gt;&gt; Contig000001<br>
&gt; &gt; CCACGTAAGAGCACCTGGGTCCCCGCCCGCCAAGCGCCGCGAGCGCCAGCAGCAGCTCGC<br>
&gt; &gt;&gt; hello<br>
&gt; &gt; ATATATTTTT<br>
&gt; &gt; [linhy@bioinfo1 Script]$ cat try.fa | perl <a href="http://try.pl" target="_blank">try.pl</a><br>
&gt; &gt; seq is AGAGAGAGA<br>
&gt; &gt; seq is ATATATAT<br>
&gt; &gt;<br>
&gt; &gt; Thanks<br>
&gt; &gt;<br>
&gt; &gt; Haiyan<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On Sat, 2014-07-12 at 18:36 -0700, george hartzell wrote:<br>
&gt; &gt;&gt; I just did this on my Mac OS X 10.9.4 system with perl 5.18.2:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; cd tmp<br>
&gt; &gt;&gt; mkdir haiyan<br>
&gt; &gt;&gt; cd haiyan<br>
&gt; &gt;&gt; cpanm -n -L local Bio::SeqIO<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; perl -Ilocal/lib/perl5 <a href="http://foo.pl" target="_blank">foo.pl</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; With the following little program in <a href="http://foo.pl" target="_blank">foo.pl</a>:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; use Bio::SeqIO ;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; my $in = Bio::SeqIO-&gt;new(-format=&gt;"Fasta", -fh =&gt; \*DATA);<br>
&gt; &gt;&gt; while(my $s = $in-&gt;next_seq()){<br>
&gt; &gt;&gt; &nbsp; &nbsp;print "seq is " . $s-&gt;seq . "\n"<br>
&gt; &gt;&gt; }<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; __DATA__<br>
&gt; &gt;&gt;&gt; ct1<br>
&gt; &gt;&gt; AGAGAGAGA<br>
&gt; &gt;&gt;&gt; ctg2<br>
&gt; &gt;&gt; ATATATAT<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; and it does this when I run it:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; (alacrity)[18:22:58]haiyan&gt;&gt;perl -Ilocal/lib/perl5 <a href="http://foo.pl" target="_blank">foo.pl</a><br>
&gt; &gt;&gt; seq is AGAGAGAGA<br>
&gt; &gt;&gt; seq is ATATATAT<br>
&gt; &gt;&gt; (alacrity)[18:24:42]haiyan&gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Can you get the same series of things to work?<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; If you’re doing a bunch of this kind of stuff, you might want to look<br>
&gt; &gt;&gt; at Data::Section; rjbs discusses it<br>
&gt; &gt;&gt; here. It’s warmer and fuzzier than dealing with the DATA handle by<br>
&gt; &gt;&gt; yourself.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; g.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; ​<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Bioperl-l mailing list<br>
&gt; &gt; <a href="mailto:Bioperl-l@mailman.open-bio.org">Bioperl-l@mailman.open-bio.org</a><br>
&gt; &gt; <a href="http://mailman.open-bio.org/mailman/listinfo/bioperl-l" target="_blank">http://mailman.open-bio.org/mailman/listinfo/bioperl-l</a><br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br></div>
</body>