chat расширяет функциональность стандартных пар ожидание/передача альтернативными вариантами, повышающими надежность сценариев. Существует возможность задать альтернативную строку для передачи и альтернативное ожидаемое значение, которые используются, если истек временной интервал для основного ожидаемого значения. Альтернативные варианты в тексте сценария предваряются дефисами. Пример:
gin:-BREAK-gin: becca
В данном случае ожидается получение строки gin:, предполагается ответ строкой becca. Первая и последняя строки составляют стандартную пару ожидание/передача. Альтернативная пара передача/ожидание используется, если истек интервал ожидания и строка gin: не была получена. Тогда сценарий передает разрыв строки, обнуляет таймер и снова переходит к ожиданию строки gin:, поскольку именно такое поведение предписывается альтернативной парой передача/ожидание (-BREAK-gin:). Заметим, что для альтернативной пары передача значения выполняется до перехода в режим ожидания строки, то есть передача предшествует ожиданию. Еще один пример в серии наших сценариев:
name>—name > karen
Сценарий ожидает получения строки паше>. Если строка не получена, сценарий передает пустую строку (возврат каретки) и снова переходит к ожиданию строки паше>. Такое поведение определено альтернативной парой передача/ ожидание, --name>. Пара начинается с дефиса, который отмечает начало строки для передачи, но следующий символ также является дефисом и отмечает начало альтернативного ожидаемого значения. Строка для передачи, таким образом, отсутствует. Именно эта «пустая строка» приводит к передаче одного символа возврата каретки. Подобная конструкция, будучи менее прозрачной, применяется чаще, чем вариант со словом BREAK, описанный выше.
Помимо символа возврата каретки в chat существуют и другие escape-послвдовательности для приема и передачи специальных символов. Они перечислены в табл. А.2.