Как вы заметили, слова, которые вы ищете, не"короткое замыкание". Оценка короткого замыкания означает, что в выражении
e1 || e2
если выражение e1
оценивается как нечто, представляющее истину, тогда нет необходимости оценивать e2
. И C, и Perl используют оценку короткого замыкания.
Мне известно о различии, которое вы делаете в двух разных вариантах короткого замыкания ИЛИ , но за двадцать лет работы на языках программирования я никогда не видел, чтобы эти вещи назывались. Версия Perl довольно популярна на динамических языках, например, Icon, Lua, Scheme.
Версия Perl почти выражается в C:
e1 ? e1 : e2
К сожалению, эта версия может оценивать e1
дважды, в зависимости от оптимизатора - & если у e1
есть побочные эффекты, или если компилятор не может определить, может ли иметь побочные эффекты, компилятор требуется , чтобы оценить его дважды. Этот дефект можно исправить, привязав значение e1
к новой локальной переменной, но для этого требуется расширение GNU.
Поведение C можно эмулировать в Perl с помощью
!!(e1 || e2)