Спецификация YAML конкретно указывает , что «ключи отображения не имеют порядка» и что «в каждом случае, когда порядок узлов является значимым, должна использоваться последовательность».Выводить порядок из сопоставления будет в нарушение спецификации.Использование упорядоченных отображений, как упомянуто mugen, является правильным решением для сохранения порядка.
Если бы вы действительно хотели, вы могли бы каким-то образом заставить синтаксический анализатор YAML выбросить в Tie:: IxHash , который сохранит порядок ... но я не знаю ни одного Perl YAML-парсера, который бы давал вам такой уровень контроля.Возможно, вы могли бы что-то сделать с YAML :: Old :: Loader , но это не очень хороший синтаксический анализатор YAML, и YAML :: Old :: Loader не задокументировано.
Третийможно было бы использовать явные теги YAML (он же типы), чтобы дать парсеру команду загружать ваши отображения как специальный тип, а затем предоставить обратный вызов ... но даже в этом случае, вероятно, синтаксический анализатор YAML предоставит вашобратный вызов с неупорядоченным хешем.
Я бы посоветовал вам просто изменить YAML.Суть переносимого языка данных заключается в том, что все семантическое значение явно в файле данных или спецификации, а не в конкретном синтаксическом анализаторе.Упорядоченные отображения являются приемлемой, компактной идиомой YAML.
- foo:
bar: some value
baz: other value
- qwe:
bar: yet another value
baz: again