Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > конструкция


Автор: Bulat 15.11.2006, 15:21
Вообщем-то вопрос простой, однако, млин, чтот поискал в свем справочнике не нашел smile
Код

exists $logins{"$address"})?($logins{"$address"}):($logins{"$address"}=...


конструкция какую функцию выполняет... вот "?" и ":" к чему?

Автор: Nab 15.11.2006, 17:29
если $logins{"$address"} существует, то будет возвернут именно он, иначе ему будет присвоено значение и опять же он будет возвращен как результат.

это упрощенная форма 

IF
 return
ELSE
 return

, очень удобна при простых проверках, и таких конструкциях.

Конечно можно было бы написать:

$logins{"$address"} ||= ... новое значение.

Но такая конструкция проверяет истинность ключа, а не его существование, то есть если там будет 0 или пустая строка, она тоже выполниться, поэтому приходиться строить более сложное выражение.

А вот 
$logins{"$address"} ||= ...
и 
(defined $logins{"$address"})?($logins{"$address"})smile$logins{"$address"}=...)
в  принципе эквивалентны...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)