[Moscow.pm] Отключение warnings 'uninitialized'

Ilya Chesnokov chesnokov.ilya на gmail.com
Пт Окт 28 06:35:54 PDT 2011


28 октября 2011 г. 17:22 пользователь Alexandr Gomoliako
<zzz на zzz.org.ua> написал:
>> В ответах уже проскакивал например, что баги ловит - я согласен.
>
> Про баги это неправда. Я уже почти год пользуюсь с выключенными
> uninitialized, никаких проблем.

Это как в той цитате с баша про вирусы:

(звонок админу городской сети):
- у вас вирусы по локалке гуляют!
- достали вы со своим Касперским, поставьте нод, он их не видит!

Банальный пример полезности предупреждения об uninitialized value
(заодно и пожалуюсь).

Недавно Яндекс.Деньги и изменили регистр символа в уведомлении о
принятом платеже.
В результате в хеше параметров значением $p->{CustomerNumber} был
undef -- и при подсчёте контрольной суммы она не сходилась с
эталонной, и мы не принимали платёж. Это продолжалось некоторое время,
после чего проблему обнаружили и исправили.

На следующий же день пришло автоматическое письмо со списком
варнингов, случившихся за прошедший день, в числе которых был и этот
варнинг с "use of uninitialized value" в ключе хеша.

Если бы у нас не было относительно много платежей по Яндекс.Деньгам в
течение дня, и мы не заметили бы эту проблему раньше, то вполне
возможно, заметили бы её только на следующий день -- когда увидели бы
её в списке варнингов. Если же 'use of uninitialized value' было бы
отключено, могли бы очень долго не замечать этот баг.

>> какие есть не аргументы "против", а аргументы "за"?
>
> Чистота кода. Пример:
>    if ($r->{foo} > 100)
> вместо
>    if ($r->{foo} =~ /^\d+$/ && $r->{foo} > 100)

тут скорее: if ( $r->{foo} && $r->{foo} > 100 )

> Аналогично с кучей ненужных инициализаций, вложенными хэшам и т.д.
> В целом читабельность повышается очень сильно.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Best regards,
Ilya Chesnokov


Подробная информация о списке рассылки Moscow-pm