2015-05-23 8 views
15

Sto cercando di giocare con la manipolazione del parser perl. Sembra che i vari moduli B::Hooks siano ciò che le persone usano. Mi chiedevo:Come usare B :: Hooks per manipolare il parser perl

  1. miglior punto di partenza per chi non ha alcuna esperienza XS (ancora). Qualche post sul blog pertinente?

  2. Quanto lavoro sarebbe coinvolto nella creazione di un nuovo operatore, ad esempio:

    $a~>one~>two~>three

~> avrebbe funzionato come -> Ma non sarebbe provare a chiamare il undef e avrebbe invece semplicemente restituire undef a LHS.

Sebbene un filtro di origine possa funzionare, sono più interessato a vedere come è possibile manipolare il parser a un livello più profondo.

+4

Sembra una caratteristica interessante. :) –

+0

L'ho pensato mentre mi infastidiva facendo 'if ($ dom-> at ('div') -> at ('h1')) {' in Mojo :: DOM e getting non può chiamare undefined perchè 'inesistente :) – LLFourn

+0

Non l'ho ancora capito, ma questo sembra promettente: https://metacpan.org/pod/B::Utils – LLFourn

risposta

1

Non credo che sia possibile aggiungere operatori infissi (operatori i cui operandi sono prima e dopo l'operatore), molto meno simbolici (rispetto agli operatori denominati), ma è possibile scrivere un controllo op che sostituisce le chiamate di metodo . Ciò significa che potresti fare in modo che ->foo si comporti diversamente. Scrivendo il modulo come pragma, è possibile limitare l'effetto del modulo a un ambito lessicale (ad esempio { use mypragma; ...}).