En utilisant les temps de 'pour obtenir les temps de CPUs de Perl avant et après les boucles suivantes me montre que, pour une raison quelconque, la version pré-compilée regex est en fait environ 33% plus lent que le regex en ligne. J'ai fait le regex match deux fois pour être proche de l'exemple de code et pour empêcher toute optimisation Perl mystérieuse à travers les boucles.
for (1..$num_runs) {
$test_string =~ $pcr;
$test_string =~ $pcr;
}
et
for(1..$num_runs) {
$test_string =~ m/\s*[\/\\]?\s*/;
$test_string =~ m/\s*[\/\\]?\s*/;
}
Avec $num_runs
étant 10000000 et $pcr
et $test_string
étant les suivantes:
my $pcr = qr/\s*[\/\\]?\s*/;
my $test_string = '<what>';
Les temps cpu après avoir trouvé le delta et la moyenne étaient:
------------------------------
Precompiled regex:
------------------------------
user : 0.0000040190
system : 0.0000000010
------------------------------
Inline regex:
------------------------------
user : 0.0000030580
system : 0.0000000000
Je ne pas utiliser Benchmark.pm de Perl pour des raisons personnelles. Je l'ai vu donner des chiffres manifestement faux et, alors qu'ils étaient minimes, l'analyse comparative est inutile si vous avez des chiffres que vous ne pouvez pas faire confiance. Ces chiffres que je peux faire confiance, bien que les tests que j'ai évalués pourraient avoir besoin d'être réévalués.
Que se passe lorsque vous référence vous-même? –
Je me demandais en général vraiment que je ne sais pas grand-chose à propos de pré compilé regex en Perl, me semble que depuis votre mise à l'expression rationnelle précompilé dans une autre déclaration regex tout doit se compilé à nouveau de toute façon. – user105033
Ouais. Je me demande comment on pourrait trouver une chose pareille! –