Мне интересно, если это потому, что вы увеличиваете и $_
, и $a
во втором, тогда как первый выполняет внутреннее приращение.
time perl -e 'for($_=1;$_<=10000000;){$_++;}'
real 0m0.544s
user 0m0.540s
sys 0m0.000s
time perl -e 'for($_=1;$_<=10000000;$_++){$a;}'
real 0m0.593s
user 0m0.580s
sys 0m0.000s
оба избавляются от дополнительной переменной и также имеют более близкие результаты, но они не эквивалентны оригиналупример
Как и JavaScript, обратный цикл while будет даже быстрее, чем ваш второй метод, и немного медленнее, чем ваш первый:
time perl -e '$a=0;for($_=10000000;$_--;){$a++;}'
real 0m0.543s
user 0m0.530s
sys 0m0.000s
time perl -e '$a=0;$_=10000000;while($_--){$a++;}'
real 0m0.569s
user 0m0.550s
sys 0m0.010s
оба эквивалентны исходному примеру;однако это может быть невозможно, если вы не можете отступить назад.они ближе к вашим первым результатам