2013/12/23 Nick Knutov <[email protected]>:
>
> Как можно коротко и красиво переписать этот кусок?
> $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0

По-моему, это условие не имеет смысла:
-   если значение 0, то первая часть условия не выполнится;
-   если значение истинно, то оно не может быть 0, т.е. вторая часть
не выполнится.

Вот это имеет больше смысла:

    $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==1
    # или
    defined $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0
    # или
    exists $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0

Как вариант, короче можно записать так:

    ($ha->[$i]->{is_main} // 0) == 1

где 0 --- значение по-умолчанию, если оно имеет место быть;
иначе любое несуществующее значение, что бы избежать предупреждения
"uninitialized".

Последний вариант не рекомендую. Если у вас ситуация все же такая
когда нужно отличать 0, undef и отсутсвие ключа в хеше --- напишите
вспомогательную функцию.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить