应该可以,等待一个标准输入应该也可以,我都用过,输入空格不会退出
对了,这个标准输入最终要输入一个回车才可以,你要是任意输入的话,就pause好了,
next和last *** 作符允许在循环中改变程序执行的方向,next允许跳至本次循环的结束位置,开始下一个循环。last允许跳至整个循环的结束,和循环条件表达式为假的情况相同。也就是last相当于break next相当于continue
1、open IN, $seq_file || die $!这句读文件的,IN是文件句柄的名字,$seq_file指明文件来源, 后面的 || die $!表示 如果前面的open失败 则用 die报告错误,并结束程序, $!在报错的时候内容为实际的出错原因。提示,最好使用3个参数的open函数,比如:open ( IN, '<', $file_name) or die "Can't open $file_name : $!"
第二个参数 <表示读入, >表示写出, >>表示追加。
2、while (<IN>) { 这一句, 相当于2句, 首先是 $_ = <IN>;默认读入的内容存在系统默认变量 $_中, 然后while循环 测试 $_的值是否非空,如果读入成功则进入循环;
3、if (/^>(\S+)/) { 这一句用于检查 $_ 的内容和正则表达式 /^>(\S+)/ 是否匹配, ^表示文件头, 用()括起来的内容可以在后面引用匹配的实际的值,如果不需要该值就不需要括号了。比如,文件读入内容为: >nm_415621 rna 那么后面紧接着的变量赋值 my $tagId=$1结果就是nm_415621 , $1 引用了前面匹配的括号里的内容。
4、原来这样啊,那要是同时读2个变量
(/>(\S)+\s+(\d+)/)
my $tagId=$1
my $count=$2
是这样吗?要是没有if,怎么读<IN>里的变量啊,比如my $seq=<IN>怎么从 $seq抽取$tagId和$count?
答: 这个不用if来判断是不行的, 因为 $seq=<IN>理论上是读入文件,但是失败了呢,比如读完了或者文件为空,则 $seq 是没有值的后面也酒不能用了,所以要先确保 $seq 有值,就是要加一句 if ($seq){..} , 还不如 if ($seq=<IN>){..} 方便;正则匹配的时候也是, 你不知道能不能匹配成功。代码如下:
/>(\S)+\s+(\d+)/my $tagId=$1my $count=$2
有时候对有时候会出错!为什么? 因为可能匹配失败啊,比如这一行内容是 :acgtacgt,肯定没有匹配的内容,my $tagId=$1my $count=$2这里的$1和$2是没有值的,所以就会报错了,但是
if(/>(\S)+\s+(\d+)/){ my $tagId=$1my $count=$2} 这个肯定对,成功匹配的时候 $1匹配前面的, $2匹配后面的数字,刚好是想要的内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)