Her zaman olduğu gibi çalışır daha hızlı kodunu iki adet olduğunu bilmek istediğinizde, bunu test etmek zorunda:
#!/usr/bin/perl
use 5.012;
use warnings;
use Benchmark qw<cmpthese>;
say "Extreme ,,,:";
my $Text = ',' x (my $LEN = 512);
cmpthese my $TIME = -10, my $CMP = {
capture => \&capture,
lookahead => \&lookahead,
};
say "\nExtreme ,0,0,0:";
$Text = ',0' x $LEN;
cmpthese $TIME, $CMP;
my $P = 0.01;
say "\nMixed (@{[$P * 100]}% zeros):";
my $zeros = $LEN * $P;
$Text = ',' x ($LEN - $zeros) . ',0' x $zeros;
cmpthese $TIME, $CMP;
sub capture {
local $_ = $Text;
s/,(\d)/$1/;
}
sub lookahead {
local $_ = $Text;
s/,(?=\d)//;
}
kriter üç farklı durumlarda test eder: Sadece
- ', '
sadece
- ', 0'
- % 1 '0' , kalan','
Benim makinede ve benim perl sürümü ile
, bu sonuçlar üretir:
Extreme ,,,:
Rate capture lookahead
capture 23157/s -- -1%
lookahead 23362/s 1% --
Extreme ,0,0,0:
Rate capture lookahead
capture 419476/s -- -65%
lookahead 1200465/s 186% --
Mixed (1% zeros):
Rate capture lookahead
capture 22013/s -- -4%
lookahead 22919/s 4% --
Bu sonuçlar ileriye bakma sürümü neredeyse sadece virgül durumunda hariç, yakalama çok daha hızlı olduğu varsayımını kanıtlar. Ve PSIAlt'ın kendi yorumunda zaten açıkladığı gibi, gerçekten de şaşırtıcı değil. İki regexes bazı kıyaslama testlerini yapmak
Saygılarımızla, Matthias
Gerçekten da önemli bir fark belirleyemez. İkisi de çok hızlı. Bu regex'lere, yakalamaya değil de benzerlere uygulanır. – TLP
Apaçık: verileri kopyalamak için grup kuvvetini yakalayın ve sonra da '$ 1' değerindeki enterpolasyonu değiştirin, ikinci regex ise sadece bul/kontrol et/kaldır. Bununla birlikte, hızdaki fark görünmez olmalıdır. – PSIAlt