Как использовать B::Hooks для управления парсером Perl

Я смотрю, чтобы играть с Perl парсером манипуляций. Похоже, различные B::Hooks модули - это то, что люди используют. Я размышлял:

  1. Лучшее место для тех, у кого нет XS опыт (пока). Любые соответствующие сообщения в блоге?

  2. Сколько работы потребуется для создания нового оператора, например:

    $a~>one~>two~>three

~> будет работать как -> но он не будет пытаться позвонить на undef и вместо этого просто вернется undef в LHS.

Хотя фильтр источника будет работать - мне больше интересно посмотреть, как вы можете манипулировать синтаксическим анализатором на более глубоком уровне.

1 ответ

Решение

Я не верю, что вы можете добавить инфиксные операторы (операторы, операнды которых находятся до и после оператора), гораздо менее символические (в отличие от именованных операторов), но вы могли бы написать операционную проверку, которая заменяет вызовы методов. Это означает, что вы могли бы вызвать ->foo вести себя по-другому. Написав свой модуль как прагму, вы можете ограничить эффект вашего модуля лексической областью (например, { use mypragma; ...}).

Другие вопросы по тегам