Code :: Splice.

Code :: Splice Injiziert den Inhalt einer Subroutine an einem bestimmten Punkt an einem bestimmten Punkt.
Jetzt downloaden

Code :: Splice. Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • Perl Artistic License
  • Preis:
  • FREE
  • Name des Herausgebers:
  • Scott Walters and Brock Wilcox
  • Website des Verlags:
  • http://search.cpan.org/~swalters/

Code :: Splice. Stichworte


Code :: Splice. Beschreibung

Code :: Splice spritzt den Inhalt eines Unterprogramms an einem bestimmten Punkt an anderer Stelle. Code :: Splice spritzt den Inhalt eines Unterprogramm zu einem bestimmten Punkt elsewhere.SYNOPSIS Verwendung Code :: Splice; Code :: Splice :: inject (code => sub {print "fredn";}, Paket => 'main', method => 'foo', Voraussetzung => sub {my $ op = shift; my $ line = Verschiebung ; $ line = \ m / Druck / und $ line = \ m / vier /;}, Nachbedingung => sub {my $ op = shift; my $ line = shift; $ line = \ m / Druck / und $ line = \ m / fünf /;}); sub foo {print "ONEN"; drucken "twon"; drucken "threen"; drucken "Fourn"; drucken "fiven"; } Entfernt Dieses Modul den Inhalt eines Unterprogramm (in der Regel ein anonymes Unterprogramm für den Zweck gerade erstellt) und Spleißstellen in in das Programm elsewhere.Why, fragen Sie? Stärker Unit-Tests schreiben als die Granularität der API sonst schreiben Unit-Tests erlauben würde, für bös, interdependant speghetti Code (meine Motivation - hey, musst du Tests haben, bevor Sie Refactoring kann beginnen, und wenn Sie den Code keine Schreibtests für können, sind Sie geschraubt) Fix dumme Fehler und entfernen dumme Einschränkungen in anderer Leute Code in einer Weise, dass Sie mehr resiliant über Upgrades als Bearbeiten von Dateien nicht ownBe was Aspekte sollte Schraube mit Kuh-orkers ist durch die Einführung von Monster heisenbugs Spielen Sie mit selbst-modifizierenden Code schreiben selbst replizierenden Code (aber nett sein, wir wieder alle Freunde hier, rechts), die Besonderheiten: der Körper des Codes {} Block werden aus dem Unterprogramm extrahiert und in einem Ort in dem Code spezifiziert durch den Aufruf der Spleiß () Funktion eingesetzt. Wo der neue Code gespleißt in, wird der alte Code gespleißt werden. Die Verpackung und Methodenargumente sind erforderlich, und die Sache erklären, wie der Code finden geändert werden. Das Code-Argument ist erforderlich, da es den Code angibt, in gespleißt werden. Den gleichen Codeblock soll nicht für etwas anderes unter Strafe der argumets von coredump.The Rest verwendet werden, anzugeben, wo der Code eingefügt werden soll. Eine beliebige Anzahl von Voraussetzung und Nachbedingung Argumente liefern Rückrufe zu helfen, den genauen Bereich suchen Sie den Code Spleiß in an. Bevor der Code E gespleißt in kann, die alle die Voraussetzung Blöcke müssen wahr sind zurückgekehrt, und keines der Nachbedingung Blöcke haben noch wahr zurückgegeben. Wenn eine Nachbedingung true zurück, bevor alle der Voraussetzung Blöcke haben, wird ein Fehler ausgelöst. Beide Blöcke erhalten mehrmals pro Zeile genannt und erhalten einen Verweis auf die B OP Objekt gerade betrachteten und den Text der aktuellen Zeile übergeben: Voraussetzung => sub {my $ op = shift; my $ line = shift; $ Line = \ m / Druck / und $ line = \ m / vier /; }, ... oder ... Voraussetzung => sub {my $ op = shift; $ OP-> name eq 'padsv' und $ OP-> SV-> sv = ~ m / fred /; }, Dann ist es möglich, Code in der Mitte eines Ausdruck einzulegen, wenn ops testen, aber wenn Sie den Text der Zeile Code zu testen, die in Code gespleißt wird die ganze line.I'll wahrscheinlich fallen Senden in dem Opcode in einem immer ersetzen zukünftige Version, zumindest für die Voraussetzung / Nachbedingung Blöcke, oder vielleicht werde ich sie zum zweiten arg tauschen so dass sie mehr optional.Do versuchen sie nicht, Text in den Kommentaren zu entsprechen, da sie nicht da sein. Der Code in $ Linie ist neu erzeugt aus dem Bytecode mit B :: Deparse und wird aus dem ursprünglichen Quellcode in ein paar Möglichkeiten, einschließlich Änderungen an der Formatierung Änderungen an einige Idiomen und Details der Ausdrücke, und die Formatierung des Codes variieren in Bezug auf whitespace.The Splicing-Code wird sterben, wenn es aus irgendeinem Grund ausfällt. Dies wird wahrscheinlich in Zukunft möglich versions.There sind auch Argumente Etiketten- und Linie, die Voraussetzungen für einfache Fälle für Sie, erstellen ändern. Natürlich sollten Sie nicht Linie für etwas verwenden, um andere als einfach experimentation.References zu lexikalischen Variablen im Code mit Verweisen auf die lexikalischen Variablen des gleichen Namens in der Lage sind, ersetzt injiziert werden soll, wird der Code in eingefügt. Wenn eine Variable mit dem gleichen Namen nicht existiert, es ist ein Fehler. ... aber es sollte wohl kein Fehler sein, zumindest in den Fällen, in denen der Code erklärt, dass lexikalisch mit meiner gespleißt wird, oder wenn die Variable in ganz außerhalb des Unterblock gespleißt initiailized wurde und wurde lediglich geschlossen über von it.See die Kommentare im Quelltext (oben, in einem schönen Block) für meine todo / gewünschten Funktionen. Lassen Sie mich wissen, ob es irgendwelche Features drin sind oder noch unsuggested, dass Sie wollen. Ich werde sie nicht versprechen, aber ich möchte über sie hören. Anforderungen: · Perl.


Code :: Splice. Zugehörige Software