小编给大家分享一下如何提升Perl性能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
变量和常量
1,提升Perl性能时尽量减少数学表达式的计算,如:
$day=24*60*60;#不好
$day=86400;#better
2,使用vec函数而不是变量来存放非常小的数字。
1,如果输出里没有变量需要内插,使用单引号'而不是双引号".因为双引号会强制Perl检查可能插入的信息
2,多段输出时用,而不是.。因为连接操作符.会首先将字符串连接在一起,然后将其作为一个参数打印
避免没必要的引号
提升Perl性能时没有绝对必要不要使用引号:
my$copy="$large_string";
上述会$large_string做两次拷贝(一是拷贝到$copy另一次是引号内插),反之
my$copy=$large_string;
只做一次拷贝。
数组字符串化
同样摘自FAQ3.16
对于大数组字符串化:
{ local$,="\n"; print@big_array; } 比下面两样都更节省内存 printjoin"\n",@big_array; #or { local$"="\n"; print"@big_array"; }
引用\
提升Perl性能时如果使用大型数组或hash表,并使用它们作为函数的参数,那么应该使用它们的一个引用,而不应该直接使用它们。通过使用引用,可以告诉函数指向信息的指针。如果不使用引用,就需要将整个数组或hash表复制到该函数的调用栈中,然后在函数中再次对其进行复制。引用还可以节省内存(这可以减少足迹和管理的负载),并简化您的编程。
循环
尽早在循环内放置条件语句,以使Perl不执行无用的语句。如
while(){
chomp;
nextif/^#/;
next可以放在chomp上面。
有选择性地使用map和grep
因为map和grep是使用LIST列表参数,所以这么做
@wanted=grep{/pattern/};
会一次性读入整个文件。对于大文件来说,使用循环会更好一点:
while(){
push(@wanted,$_)if/pattern/;
}
正则表达式
pack/unpack>regexp>substr
删除字符串中的字符时用tr///d来代替s///g
在正则表达式的外面使用“or”或“||”操作。
$found=if/one/||/two/;#better
$found=if/one|two/;#useabovetoreplace
如果字符串很长,正则表达式很复杂,可以使用study来加快速度
数据结构
Tie::SubstrHash对于某些类型的数据结构会有所帮助
=pod
提升Perl性能时如果您用了一大块pod来描述你的代码,那么请尽量不要将其放在文件的上面或中间部分。虽然perl分析器能很快的跳过pod,但是这不是魔法,它还是需要一点时间的。它还是需要从磁盘中读入它,并且读入的目的仅仅是忽略它。将所有的pod放到__END__后面,那样Perl编译器就不会去注意它。
但是将pod与相关代码放在一起或许是种好习惯。
warnings/strict
强烈建议编程和调试时开启,而在代码发布时去掉它们。
Final
***强烈建议各位阅读参考里的“Whenperlisnotquitefastenough”。
以上是“如何提升Perl性能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。