Вы также можете добавить операторы //
и //=
(проверки на определенность). Сказав это, если разница в скорости для этих методов действительно имеет значение для вашей программы, вы можете переместить части своего алгоритма за пределы 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.
Предполагая, что кавычки вокруг «false» в исходном вопросе означают «false», а не строго false, и, кроме того, предполагая, что undef является допустимым значением «false» в этом контексте, версия оператора undef работает примерно на 5-10% быстрее.
Если предположить, что автор вопроса ищет самый быстрый способ инициализации неинициализированной переменной, //=
, вероятно, будет быстрее на основе простых тестов, которые я сделал, хотя мои комментарии по оптимизации в Perl на этом уровне остаются в силе.
person
Marius Kjeldahl
schedule
22.03.2012