Поле преобразования содержит неопределенную лексему $1, литерал <@, неопределенную лексему $2, литерал точки ( .), ссылку на макроопределение D, н также литерал >. После сопоставления с шаблоном $1 содержит kathy. mccafferty, а $2 содержит rodent. Предположим, что макроопределение D было создано ранее в файле sendmail.cf и хранит значение wrotethebook.com. В результате исходный адрес переписывается следующим образом:
kathy.mccafferty<@rodent.wrotethebook.com>
Рисунок 10.3 иллюстрирует данное конкретное преобразование адреса. Показаны лексемы, выделенные из исходного адреса, а также их сопоставление с шаблоном. Представлены также неопределенные лексемы, созданные при сопоставлении с шаблоном, и их использование наряду с другими значениями поля преобразования для создания конечного, измененного адреса. После подстановки адрес снова сравнивается с шаблоном. На этот раз с отрицательным результатом, поскольку адрес уже не содержит одну и только одну лексему между литералами <@ и >. Итак, адрес не подвергается дальнейшей обработке данным правилом подстановки, но передается следующему по очереди правилу. Правила набора выполняются последовательно, хотя для изменения порядка их обработки могут использоваться некоторые метасимволы.
Рис. 10.3. Переписывание адреса
Символ $>л вызывает набор правил п и передает этому набору адрес, созданный оставшимися инструкциями поля преобразования. Например:
$>9 $1 % $2
Это преобразование вызывает набор правил 9 ($>9) и передает этому набору для обработки содержимое лексемы $1, символ %, а также содержимое лексемы $2. Когда набор правил 9 заканчивает работу, он возвращает обработанный адрес вызвавшему его правилу. Этот адрес снова сравнивается с шаблоном вызывающего правила. Если соответствие найдено, набор правил 9 вызывается повторно.
Рекурсия, присущая правилам подстановки, потенциально позволяет создавать бесконечные циклы, sendmail, как может, старается обнаружить возможные циклы, однако ответственность за создание правил, ведущих к зацикливанию, лежит на их авторе.