[Moscow.pm] if $var and $var==
Maxim Vuets
maxim.vuets на gmail.com
Пн Дек 23 07:46:06 PST 2013
2013/12/23 Nick Knutov <mail на knutov.com>:
>
> Как можно коротко и красиво переписать этот кусок?
> $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