perl有垃空宽圾回收机制,不过采用的是一种简单的算法--引用计数,当某变量的引用数为0时会自动释放。
至于手动释搭孝放内存,严格来讲,perl里并不存在这样的function. 不过可以“近似地”做到。
undef %hashundef @array
或者:
%hash = ()@array = ()
perl的undef()函数有两个功能: 清除变量的内容,释放变量所占的buffers, 此时你可以近似地认为已经释放了内存。
但是注意,实际上并没有真正地释放内存。如果你了解perl的变量在内存里的存放结构,你就会发现,undef后,原变量所在的内存还是被占用的,任然保持着被分配时的状态。知亏稿但是这块内存的状态被的标记被“reusable”, 当所有内存皆被用完,超出阈值时,这块"被标记"的且它的"引用数为0"的内存才会被释放。
perl的缺笑滑模点在于正是让裂因为Perl的灵活性和“过度”的冗余语法,因此获得了仅写的“美誉”,因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母碰缓就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。对此,《Learning Perl》一书里建议经常使用Perl编程。
建议的解决方法是在程序里使用use strict以及use warnings,并统一代码风格,使用库,而不是自己使用“硬编码”。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。
#!/usr/bin/perl -wuse strict
die "
Usage:perl $0 <FASTA>薯肆
" unless(@ARGV==1)####判断输入文件,如果没有输入则输出用法提示
open IN,$ARGV[0] || die"Can't open file!\n"
open OUT,">$argv[0].longer_than_200.fa" || die"Can't creat file $ARGV[0].longer_than_200.fa"
$/=">"
<FA>
$/="\n"
while(<FA>){
my $name=$_
$/=">"
my $seq=<FA>
chomp $seq
$seq=~s/\n//g####替换掉所有换行符确保输出的是碱基数大于200 而非碱基加换销手汪行数
$/="\n"
print OUT ">亏仔$name\n$seq\n" unless(length($seq)<200)####如果长度小于200 则不输出并进入下一个序列的读取
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)