Есть ли модуль CPAN, который может читать строку, подобную этой:
"[[<asdf>, <foo>], (abc, def, ghi), ({'jkl'})]"
... и разобрать его в некую древовидную структуру, по которой легко ходить и красиво печатать?
Я думаю, что вы могли бы построить поверх Text :: Balanced , что сделает для вас большую работу Вам все равно нужно будет построить древовидную структуру.
Регулярные выражения Perl 5.10 могут обрабатывать подобные сбалансированные структуры. См. (?PARNO) (?-PARNO) (?+PARNO) (?R) (?0) раздел в perlre .
(?PARNO) (?-PARNO) (?+PARNO) (?R) (?0)
Perl 6 будет иметь встроенные средства для поддержки этого. Тем временем Text :: Balanced (как упомянул Дэйв Рольский), вероятно, является предпочтительным модулем. Обратите внимание, что он также был написан Дамианом Конвеем (как рекомендовано Биллом Карвином).
Разбор Дамиана Конвея :: RecDescent
Я этим не пользовался, но стоит поспорить, что стоит использовать модуль Perl, написанный Дамианом Конвеем.
Если строка идентична формату Data Dumper , то она может быть eval возвращена в исходную структуру.
eval