Чтобы выполнить подпрограмму для каждого элемента произвольной сложной структуры данных, ознакомьтесь с шаблоном проектирования Visitor. По сути, ваша структура данных - это объект, который знает, какие элементы ему еще нужно обработать, и применяет к ним вашу подпрограмму. Там также есть немного паттерна Iterator, потому что вы понимаете, как
У меня есть пример в моем модуле Netscape :: Bookmarks . Эта структура данных глубоко вложена в несколько различных типов объектов. При использовании шаблона Visitor большая часть сложности ушла.
Кроме того, вы можете проверить мой модуль Object :: Iterate . Он имеет функцию imap
, которая работает с объектами вместо списков. Я украл идею __next__
из Python и применил ее к Perl.