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

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

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

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

    $a~>one~>two~>three

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

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

Ответы

Ответ 1

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