Как использовать B::Hooks для управления парсером Perl
Я смотрю, чтобы играть с Perl парсером манипуляций. Похоже, различные B::Hooks
модули - это то, что люди используют. Я размышлял:
Лучшее место для тех, у кого нет
XS
опыт (пока). Любые соответствующие сообщения в блоге?Сколько работы потребуется для создания нового оператора, например:
$a~>one~>two~>three
~>
будет работать как ->
но он не будет пытаться позвонить на undef
и вместо этого просто вернется undef
в LHS.
Хотя фильтр источника будет работать - мне больше интересно посмотреть, как вы можете манипулировать синтаксическим анализатором на более глубоком уровне.
1 ответ
Я не верю, что вы можете добавить инфиксные операторы (операторы, операнды которых находятся до и после оператора), гораздо менее символические (в отличие от именованных операторов), но вы могли бы написать операционную проверку, которая заменяет вызовы методов. Это означает, что вы могли бы вызвать ->foo
вести себя по-другому. Написав свой модуль как прагму, вы можете ограничить эффект вашего модуля лексической областью (например, { use mypragma; ...}
).