Кажется, что обещание дано в perldoc perlrequick :
Чтобы соответствовать dog
или cat
, мы формируем регулярное выражение dog|cat
. Как и прежде, Perl будет пытаться сопоставить регулярное выражение в самой ранней точке строки. В каждой позиции персонажа perl сначала попытается найти первый вариант, dog
. Если dog
не совпадает, Perl попытается использовать следующую альтернативу, cat
. Если cat
тоже не совпадает, то совпадение не выполняется, и perl перемещается на следующую позицию в строке.
perldoc perlretut , кажется, дает обещание еще сильнее (но с оговоркой):
"cats" =~ /c|ca|cat|cats/; # matches "c"
"cats" =~ /cats|cat|ca|c/; # matches "cats"
Здесь все альтернативы совпадают в первой строковой позиции, поэтому первая альтернатива - это та, которая соответствует. Если некоторые из альтернатив являются усечениями других, сначала поместите самые длинные, чтобы дать им шанс на совпадение.
"cab" =~ /a|b|c/ # matches "c"
# /a|b|c/ == /[abc]/
Последний пример указывает на то, что классы символов похожи на чередование символов. В данной позиции символа первой альтернативой, позволяющей успешно выполнить сопоставление регулярному выражению, будет тот, который соответствует.