perl 如何释放内存

perl 如何释放内存,第1张

perl有垃空宽圾回收机制,不过采用的是一种简单的算法--引用计数,当某变量的引用数为0时会自动释放。

至于手动释搭孝放内存,严格来讲,perl里并不存在这样的function. 不过可以“近似地”做到。

undef %hash

undef @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 -w

use 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 则不输出并进入下一个序列的读取

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/12388357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存