Вы также можете добавить операторы //
и //=
(проверка на определенность).Сказав это, если разница в скорости для этих методов действительно имеет значение для вашей программы, вы можете переместить части вашего алгоритма за пределы perl и вместо этого вызывать его из perl (используя perl в качестве «клея»).
Так как в комментариях педантичная полиция повсюду в моей заднице, я потратил время, чтобы сравнить ее.Не самый лучший бенчмаркинг-проект в мире, но я все же выполнил:
time perl -e 'my $a; for (1..10000000) { $a ||= $_; }; print $a;'
time perl -e 'my $a; for (1..10000000) { $a //= $_; }; print $a;'
В моей системе версия //=
последовательно 5-10% быстрееYMMV.
Предполагая, что кавычки вокруг «ложь» в исходном вопросе означают «ложь», а не строго ложь, и далее, предполагая, что undef является допустимым значением «ложь» в этом контексте, версия оператора undef имеет видпримерно на 5-10% быстрее.
Исходя из предположения, что автор вопроса ищет самый быстрый способ инициализации неинициализированной переменной, //=
, вероятно, быстрее на основе простых тестов, которые я сделал,хотя мои комментарии к оптимизации в perl на этом уровне все еще стоят.