
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等语言一样优雅。
这段时间因为一些不可描述的文章被整顿了,所以没有做搜神学习笔记。加上最近开学,乱七八糟的事情很多,目测要下个礼拜开始上课才能够回归正轨。最近做了一个事情就是,注释出来的初始基因组pep文件会存在许多个转录本,很多冗余的氨基酸序列,我们需要去除这些冗余,取最长的那个转录本。
对于序列只有一行的很容易可以用 grep 办到,但是还是那个问题,fasta格式存在自动换行问题,所以我们最好还是写脚本提取最长转录本比较稳妥,这里分享一下所用的脚本。
原数册粗据格式基本如下:
我写的Perl脚本修改了原文件格式和顺序(哈希表的 sort 真是个谜),以后有时间我会考虑一下世姿亏如何保留所有原格式输出,暂时将就着用吧。
另外同学依据我的需求也写了一个对应功能的Python脚本,不得不承认Python v3.0的字典在保留原顺序输出方面的能力就很强,这个脚本几乎对原文件没有改动,很实用。有时间的话会对它进行全方位的注释学习,希望自己能在Python脚本书写能力上有所进步【狗头苦笑】!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)