Учитывая чередование как /(foo|foobar|foobaz)/
Perl 6 делает какие-либо обещания, о которых из этих трех будет использоваться сначала, и если он делает, где в документации он заставляет это обещать?
Посмотрите, что связанный вопрос в настоящее время Делает Perl (5.8, и 5.10) делают какие-либо обещания о чередовании порядка, будет использоваться?.
S05 говорит
Для этого каждому регулярному выражению в Perl 6 требуется, чтобы иметь возможность различать его «чистые» шаблоны из своих действий и возвращают свой список начальных шаблонов токенов (транзитивно включающий шаблоны токенов любой подправилы, вызываемой «чистой» частью этого регулярного выражения, но не включающий какую-либо подправилу более одного раза, поскольку для этого потребуется Самостоятельная ссылка, которая не допускается в традиционных регулярных выражениях). Логическое чередование с использованием | затем берет два или более из этих списков и отправляет альтернативу, которая соответствует самому длинному префиксу токена. Это может быть или не быть альтернативой, которая появляется в начале лексически.
Однако, если две альтернативы совпадают с одинаковой длиной, связь нарушается в первую очередь из-за специфики. Альтернатива, которая начинается с самой длинной фиксированной строки, выигрывает; то есть точное совпадение считается ближе, чем совпадение, выполненное с использованием классов символов. Если это не работает, связь нарушается одним из двух способов. Если альтернативы представлены в разных грамматиках, стандартный MRO (порядок разрешения методов) определяет, какую из них попробовать в первую очередь. Если альтернативы находятся в одном и том же файле грамматики, текстовая альтернатива имеет приоритет. (Если правила грамматики определены более чем в одном файле, порядок не определен, и для принудительного сбоя необходимо использовать явное утверждение, если сначала выполняется неправильное утверждение.)
Похоже, это обещание сильно отличается от сделанный в Perl 5.
стандартное MRO (порядок разрешения методов) определяет, какой из них попробовать первым. Если альтернативы находятся в одном и том же файле грамматики, текстовая альтернатива имеет приоритет. (Если правила грамматики определены более чем в одном файле, порядок не определен, и для принудительного сбоя необходимо использовать явное утверждение, если сначала выполняется неправильное утверждение.)Похоже, это обещание сильно отличается от сделанный в Perl 5.
стандартное MRO (порядок разрешения методов) определяет, какой из них попробовать первым. Если альтернативы находятся в одном и том же файле грамматики, текстовая альтернатива имеет приоритет. (Если правила грамматики определены более чем в одном файле, порядок не определен, и для принудительного сбоя необходимо использовать явное утверждение, если сначала выполняется неправильное утверждение.)Похоже, это обещание сильно отличается от сделанный в Perl 5.
Иными словами, альтернативы должны быть сопоставлены (по крайней мере, условно) параллельно, и выигрывает самое длинное совпадение. Если вам нужны последовательные чередования, вы можете использовать двойную черту ||, которая обещает порядок слева направо, как и | делает в Perl 5 регулярных выражений.