Rya*_*son 7 string perl performance character
我正在编写一个Perl脚本,我需要在其中循环遍历字符串的每个字符.有很多字符串,每个字符串长100个字符(它们是短的DNA序列,以防你想知道).
那么,使用一次substr提取每个字符是否更快,或者split将字符串更快地转换为数组然后遍历数组?
在我等待答案时,我想我会读到如何在Perl中对事物进行基准测试.
这实际上取决于你对数据做了什么 - 但是,嘿,你的最后一个问题正朝着正确的方向发展!不要猜,基准.
Perl为这类东西提供了Benchmark模块,使用它非常简单.以下是一些示例代码:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(cmpthese);
my $dna;
$dna .= [qw(G A T C)]->[rand 4] for 1 .. 100;
sub frequency_substr {
  my $length = length $dna;
  my %hist;
  for my $pos (0 .. $length) {
    $hist{$pos}{substr $dna, $pos, 1} ++;
  }
  \%hist;
}
sub frequency_split {
  my %hist;
  my $pos = 0;
  for my $char (split //, $dna) {
    $hist{$pos ++}{$char} ++;
  }
  \%hist;
}
sub frequency_regmatch {
  my %hist;
  while ($dna =~ /(.)/g) {
    $hist{pos($dna)}{$1} ++;
  }
  \%hist;
}
cmpthese(-5, # Run each for at least 5 seconds
  { 
    substr => \&frequency_substr,
    split => \&frequency_split,
    regex => \&frequency_regmatch
  }
);
并得到一个结果:
         Rate  regex  split substr
regex  6254/s     --   -26%   -32%
split  8421/s    35%     --    -9%
substr 9240/s    48%    10%     --
原来,substr的速度惊人.:)
| 归档时间: | 
 | 
| 查看次数: | 3676 次 | 
| 最近记录: |