Tanktalus показывает эталон для очень маленьких струн, но проблемы усугубляются, когда струны становятся больше. В своем коде я изменил верхнюю часть:
my $a = 'a' x 1_000_000;
my @x = (
" $a ",
"$a ",
$a,
" $a"
);
Я получаю эти результаты:
Rate single capture trick double
single 2.09/s -- -12% -98% -98%
capture 2.37/s 13% -- -98% -98%
trick 96.0/s 4491% 3948% -- -0%
double 96.4/s 4512% 3967% 0% --
Поскольку строка становится больше, использование «трюка» и «двойника» становится практически одинаковым, а общее решение, к которому стремится большинство людей, - «одиночный» (включая меня, потому что я не могу избавиться от этой привычки, даже если Я знаю это), действительно начинает сосать.
Всякий раз, когда вы смотрите на эталонный тест, думайте о том, что он говорит вам. Чтобы понять, понимаете ли вы это, измените данные и повторите попытку. Делайте массивы длинными, большие скаляры и так далее. Заставьте циклы, greps или регулярные выражения находить вещи в начале, середине и конце. Посмотрите, соответствуют ли новые результаты вашему прогнозу. Выясните, какова тенденция. Производительность становится все лучше и лучше, приближается к пределу, достигает пика, затем начинает снижаться или что-то еще?