Я в принципе не люблю ООП, а в Perl5 и тем более (реализация просто ужасная). Но вопрос реализации объектов через благословение closure меня заинтересовал.
Я уже не первый объектный класс так пишу, и в общем могу сказать, что полноценный «закрытый» доступ к свойствам объекта, гарантирующий, что пользователь не полезет в твой объект напрямую, даже если он этого очень захочет - это вполне здравая идея, которая уже давно реализована везде и всюду, но почему-то только не в Perl5. Замечу, что в том же Moose мне удавалось «расковырять» объект и получить доступ к его свойствам, минуя все хитросплетения has-определений, всяких private'ов и «ro».
А вот с closure'ами такие вещи не прокатывают: достаточно локализовать набор переменных в конструкторе, благословляющем ссылку на процедуру - и все эти переменные будут доступны уже только внутри blessed closure.
Самая идея не нова: она упоминается в толстых книгах O'Reily (Например, «12.7.5. Using Closures for Private Objects» в самой известной из них), откуда я её и почерпнул. Тем не менее, я поискал в гугле на эту тему, изучил некоторые реализации ООП-шных нахлобучек, выложенных на CPAN'е - и не нашёл тех перловиков, которые тоже предпочитают благословлять замыкания.
Вопрос: почему так? Чем плоха идея-то?