测试环境:

CentOS release 4.7 
perl, v5.8.5

测试代码:

 
  
  1. print scalar localtime; 
  2. print “n”; 
  3. for (my $i=0;$i<10000000;$i++) 
  4.  
  5. # 方法一:使用pack 
  6.  
  7. $a = unpack(’N*’, pack(’C4′, split(/./, ‘193.168.20.3′))); 
  8.  
  9. # 方式二:使用正则加四则运算 
  10.  
  11. #’193.168.20.2′ =~ /(d+).(d+).(d+).(d+)/; 
  12.  
  13. #$a = $1 * 256**3 + $2 * 256**2 + $3 * 256 + $4
  14.  
  15. # 方式三:使用Split加四则运算 
  16.  
  17. #($a,$b,$c,$d) = split(/./,’193.168.20.2′); 
  18.  
  19. #$e = $a * 256**3 + $b * 256**2 + $c * 256 + $d
  20.  
  21. print scalar localtime; 
  22. print “n”; 

 

测试结果:
方法一(33s):
[root@localhost tmp]# perl 123.pl
Wed Jul 15 14:22:08 2009
Wed Jul 15 14:22:41 2009
内存占用:1456

方法二(44s):
[root@localhost tmp]# perl 123.pl
Wed Jul 15 14:21:05 2009
Wed Jul 15 14:21:49 2009

内存占用:1488

方法三(31s):
[root@localhost tmp]# perl 123.pl
Wed Jul 15 14:36:05 2009
Wed Jul 15 14:36:36 2009
内存占用:1436 

split加四则运算方法略胜出。

有点意外的是pack的开销居然和正则引擎接近俄。

转自http://blog.yikuyiku.com/?p=1004