从细节处提升Perl性能

开发 架构
本文向大家简单介绍一下Perl性能问题,Perl语言有很多值得我们学习的地方,这里说一下如何从细节处提升Perl性能。

本文向大家介绍一下如何从细节处提升Perl性能,主要包括变量和常量,循环,数据结构,数组字符串化等细节,希望本文的介绍能让你有所收获。

从细节处提升Perl性能

下面所写的各点都是我从其他地方找过来了。整理一下希望对各位有所帮助。

变量和常量

1,提升Perl性能时尽量减少数学表达式的计算,如:
$day=24*60*60;#不好
$day=86400;#better

2,使用vec函数而不是变量来存放非常小的数字。

print

1,如果输出里没有变量需要内插,使用单引号'而不是双引号".因为双引号会强制Perl检查可能插入的信息
2,多段输出时用,而不是.。因为连接操作符.会首先将字符串连接在一起,然后将其作为一个参数打印

避免没必要的引号

提升Perl性能时没有绝对必要不要使用引号:
my$copy="$large_string";
上述会$large_string做两次拷贝(一是拷贝到$copy另一次是引号内插),反之
my$copy=$large_string;
只做一次拷贝。

数组字符串化

同样摘自FAQ3.16
对于大数组字符串化:
 

  1. {  
  2. local$,="\n";  
  3. print@big_array;  
  4. }  
  5. 比下面两样都更节省内存  
  6. printjoin"\n",@big_array;  
  7.  
  8. #or  
  9. {  
  10. local$"="\n";  
  11. print"@big_array";  
  12. }  
  13.  

引用\
提升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”。

【编辑推荐】

  1. 术语汇编 Perl闭包概念解析
  2. Perl模式匹配参数使用详解
  3. 实例解析Perl多进程技术的应用
  4. 学习笔记 Perl split函数用法指导
  5. Perl多进程及其和多线程的关系解析
责任编辑:佚名 来源: csdn.net
相关推荐

2011-07-09 23:24:57

PHP

2012-06-29 09:47:42

笔记本评测

2019-04-12 09:45:57

Web网络线程性能

2019-11-05 14:37:24

Java性能优化编程语言

2010-01-19 17:28:36

东方通中间件

2021-08-17 09:46:57

设计细节产品体验用户

2023-11-17 18:02:19

数据仓库性能Doris

2023-08-21 12:10:08

算法AI

2010-09-21 16:27:58

OracleOOWSPARC T3

2022-02-22 16:21:04

Windows 11微软

2019-09-24 15:41:10

Web前端传输

2010-11-22 09:36:37

Perl脚本SolarisLinux

2010-07-26 16:35:34

Perl性能

2010-07-26 12:50:45

Perl性能

2021-10-25 10:23:49

Webpack 前端Tree shakin

2010-05-28 10:23:59

JavaScriptWeb

2020-07-24 07:00:00

Laravel框架Web应用开发

2013-05-22 09:38:03

GoGo语言Go性能

2023-04-10 09:15:25

Vite 4.3SWC 插件

2011-05-07 14:00:44

打印效率提升技巧
点赞
收藏

51CTO技术栈公众号