Perl和PHP字符串处理效率比较

Perl和PHP字符串处理效率比较

Perl和PHP字符串处理效率比较
测试环境:
CPU:Sempron 2200+
MEM:512M DDR400
chip:nForece2

系统Windows 2000 SP4
Perl-5.8.7
PHP-5.0.4


空循环2000000次,结果
php: 1.21438908576970 秒 0.74017310142522
perl:0.47421598434448 秒


操作字符串:
$str="aa\01aa44234235aaa:aaaa*(&(*aaaa\95\64\35asdfsf\\\aaa:aaaa\5\09\34a:abcd2462334:a";
操作2000000次

首先split操作,Perl为@array=split(/:/,$str); PHP为$array=explode(":",$str); 注split触发正则引擎explode不触发
结果:
php: 8.8024821281433 秒 基础循环速度休整以后 8.06230902671808 秒
perl:7.3894469738007 秒
明显Perl快
PHP换作preg_split(":",$str);触发正则以后
时间是:
PHP: 17.171639204025 秒 基础循环速度休整以后 16.43146610259978 秒
效率更慢


下面测substr(),Perl和PHP一样,都用$sub=substr($str,12,54);
结果:
php: 4.3015139102936 秒 基础循环速度休整以后 3.56134080886838 秒
perl:1.3711090087891 秒
还是Perl快


下面测试length,perl是$sub=length($str);PHP是$sub=strlen($str);
php: 3.4298760890961 秒 基础循环速度休整以后 2.68970298767088 秒
perl:1.0119900703430 秒


下面测试index,perl是$sub=index($str,"34a:a");PHP是$sub=strstr($str,"34a:a");
php: 4.3217279911041 秒 基础循环速度休整以后 3.58155488967888 秒
perl:2.0672690868378 秒

下面测试str_pad,perl是$sub="\0" x 9;PHP是$sub=str_pad($new,"\0",9);
php: 10.970139026642 秒 基础循环速度休整以后 10.22996592521678 秒
perl:1.4735519886017
这里PHP明显吃亏,后来看了PHP原来代码,str_pad设计不合理,他每填充一个就判断一次,而perl的x 9就傻瓜试填上9个

下面测试===,Perl是$bool=$str eq "1234";PHP是$bool=$str === "1234";
php: 1.9956939220428 秒 基础循环速度休整以后 1.25552082061758 秒
perl:1.1513710021973 秒
PHP第一次在去掉基础速度以后超越Perl,但是===和eq的概念不一样,两个操作不完全相等


PHP还是落下一大节,
[quote]下面测试===,Perl是$bool=$str eq "1234";PHP是$bool=$str === "1234";
php: 1.9956939220428 秒 基础循环速度休整以后 1.25552082061758 秒
perl:1.1513710021973 秒
PHP第一次在去掉基础速度以后超越Perl,但是===和eq的概念不一样,两个操作不完全相等

[/quote]

看上去,好像还是没有超越啊