Codice :: Splice.

Codice :: Splice inietta il contenuto di una subroutine in un punto specificato altrove.
Scarica ora

Codice :: Splice. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • Perl Artistic License
  • Prezzo:
  • FREE
  • Nome editore:
  • Scott Walters and Brock Wilcox
  • Sito web dell'editore:
  • http://search.cpan.org/~swalters/

Codice :: Splice. Tag


Codice :: Splice. Descrizione

Codice :: La giunzione inietta il contenuto di una subroutine in un punto specificato altrove. Codice :: Le giunture iniettano il contenuto di una solorroutine in un punto specificato allsywhere.synopsis Utilizzare il codice :: Splizio; Codice :: Brillice :: Inject (codice => sub {stampa "fredd";}, pacchetto => 'Main', metodo => 'foo', preliminare => sub {my $ op = shift; my $ line = shift; ; $ LINE = ~ m / Print / e $ Line = ~ m / four /;}, postcondition => sub {my $ op = shift; my $ line = shift; $ line = ~ m / print / e $ Line = ~ m / cinque /;},); sub foo {stampa "onen"; Stampa "TWON"; Stampa "Threen"; Stampa "Fourn"; Stampa "Fiven"; } Questo modulo rimuove il contenuto di una subroutine (di solito una subroutine anonima creata solo per lo scopo) e giunica nel programma altrove. Perché, chiedi? Scrivi test unità più forti rispetto alla granularità dell'API per consentire altrimenti le prove di scrittura Codice Speghetti cattivi e interdipendenti (la mia motivazione - hey, devi avere test prima di poter iniziare a refactoring, e se non riesci a scrivere test per il codice, sei avvitato) Correggere gli insetti stupidi e rimuovi stupide restrizioni nel codice degli altri in un modo che è più resilisante attraverso gli aggiornamenti che modificare i file non possiedono quali "aspetti" dovrebbero essere avvitati con i tuoi orchelli di mucche introducendo il mostro Heisenbugs giocare con il codice auto-modificante scrivi codice auto-replicazione (ma sii gentile, noi ' Re Tutti gli amici qui, giusto?) Le specifiche: il corpo del codice del codice {} blocco viene estratto dalla subroutine e inserita in un luogo nel codice specificato dalla chiamata alla funzione di split (). Dal punto dovuto al nuovo codice, il vecchio codice viene girato fuori. I pacchetti e gli argomenti del metodo sono richiesti e dicono alla cosa come trovare il codice da modificare. L'argomento del codice è richiesto in quanto specifica il codice da giuntare in. Quello stesso blocco di codice non deve essere utilizzato per nient'altro in pena di coredump. Il resto degli argomenti specifica dove il codice deve essere inserito. Qualsiasi numero di argomenti preliminari e di postcondition forniscono callback per aiutare a localizzare l'area esatta per girare il codice in. Prima che il codice possa essere immerso, tutti i blocchi preliminari devono essere restituiti true e nessuno dei blocchi di postcondition potrebbe essere stato ancora restituito. Se una postcondition restituisce true prima di avere tutti i blocchi di precondizione, viene sollevato un errore. Entrambi i blocchi vengono chiamati numerosi tempi per riga e passano un riferimento all'oggetto B OP attualmente in esame e il testo della linea corrente: Precondition => sub {my $ op = shift; la mia linea $ = shift; $ LINE = ~ m / Print / e $ LINE = ~ m / quattro /; }, ... o ... preliminare => sub {my $ op = shift; $ OP-> Nome EQ 'Padsv' e $ OP-> SV-> SV = ~ m / fred /; }, È possibile inserire il codice nel mezzo di un'espressione durante il test OPS, ma durante il test del testo della riga del codice, la succurst in codice sostituirà sempre l'intera linea. Probabilmente cadrà invio nell'OPCODE in A Versione futura, almeno per i blocchi preliminari / postcondition, o forse lo susciterò alla seconda ARG, quindi sono più opzionali. Non tentare di abbinare il testo nei commenti in quanto non ci sarà. Il codice in $ LINE viene nuovamente generato dal bytecode utilizzando B :: Deparese e varierà dal codice sorgente originale in alcuni modi, comprese le modifiche alla formattazione, le modifiche a alcuni idiomi e dettagli delle espressioni e formattazione del codice Per quanto riguarda lo spazio bianco. Il codice di splicing morirà se non riesce per qualsiasi motivo. Ciò cambierà in possibili versioni future. Ci sono anche etichettare e argomenti di linea che creano precondizioni per te, per casi semplici. Naturalmente, non è necessario utilizzare la linea per nulla di diverso da una semplice sperimentazione. Le conferenze alle variabili lessicali nel codice da iniettare vengono sostituite con riferimenti alle variabili lessicali dello stesso nome nella posizione in cui è inserito il codice. Se una variabile dello stesso nome non esiste lì, è un errore. ... Ma probabilmente non dovrebbe essere un errore, almeno nei casi in cui il codice è giuntato in dichiara che lessicale con il mio, o quando la variabile è stata inizializzata interamente al di fuori del blocco secondario in entrata e fu semplicemente chiusa da esso. Sede i commenti nel codice sorgente (in alto, in un bel blocco) per le mie funzionalità todo / desiderate. Fammi sapere se ci sono caratteristiche lì dentro o ancora non redditizie che vuoi. Non li prometterò, ma vorrei sentire parlare di loro. Requisiti: · Perl.


Codice :: Splice. Software correlato