Code :: splice

Code :: Splice Injecteert de inhoud van één subroutine op een bepaald punt elders.
Download nu

Code :: splice Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • Perl Artistic License
  • Prijs:
  • FREE
  • Naam uitgever:
  • Scott Walters and Brock Wilcox
  • Uitgever website:
  • http://search.cpan.org/~swalters/

Code :: splice Tags


Code :: splice Beschrijving

Code :: Splice injecteert de inhoud van een subroutine op een bepaald punt elders. Code :: Splice injecteert de inhoud van een subroutine op een bepaald punt elsewhere.SYNOPSIS gebruik Code :: Splice; Code :: Splice :: inject (code => sub {print "fredn";}, pakket => 'main', methode => 'foo', voorwaarde => sub {my $ op = shift; mijn $ lijn = shift ; $ lijn = ~ m / afdrukken / en $ lijn = ~ m / vier /;}, postconditie => sub {my $ op = shift; mijn $ lijn = shift; $ lijn = ~ m / afdrukken / en $ lijn = ~ m / vijf /;}); sub foo {print "Onen"; afdrukken "twon"; afdrukken "threen"; afdrukken "Fourn"; afdrukken "fiven"; } Deze module verwijdert de inhoud van een subroutine (meestal een anonieme subroutine gemaakt alleen voor het doel) en verbindingen in in het programma elsewhere.Why, vraagt u? Schrijf sterker unit tests dan de granulariteit van de API anders zou toestaan Write unit tests voor nare, interdependant speghetti code (mijn motivatie - hey, je moet testen voordat je kunt beginnen refactoring, en als je niet kunt schrijven tests voor de code, je bent geschroefd) Fix dom bugs en verwijder domme beperkingen in de code van andere mensen op een manier die meer is resiliant over upgrades dan het bewerken van bestanden heb je niet ownBe wat "aspecten" Screw moet worden met uw cow-erknemers door de invoering van monster heisenbugs Speel met self-modificerende code Write zelfreplicerende code (maar mooi zijn, we' zijn allemaal vrienden hier rechts) de details: het lichaam van de code {} blok worden uit de subroutine en ingevoegd in een plaats in de code die door de aanroep van de splice () functie. Wanneer de nieuwe code wordt gesplitst in, is de oude code splicing. Het pakket en de methode argumenten nodig zijn en vertellen het ding hoe op zoek naar de code te wijzigen. De code argument is nodig omdat het de code te worden gesplitst in specificeert. Diezelfde code blok niet gebruikt mag worden voor iets anders op straffe van coredump.The rest van de argumets aangeven waar de code moet worden ingevoegd. Elk aantal randvoorwaarde en postconditie argumenten bieden callbacks te helpen lokaliseren het exacte gebied om de code te splitsen in op. Voordat de code kan E gesplitst in, moet alle vereiste blokken ware zijn teruggekeerd, en geen van de postconditie blokken kunnen nog zijn teruggekeerd waar. Als een postconditie true retourneert voordat alle vereiste blokken, wordt een fout verhoogd. Beide blokken krijgen meerdere malen per lijn genaamd en erdoor te krijgen een verwijzing naar het B OP object momenteel in behandeling en de tekst van de huidige regel: voorwaarde => sub {my $ op = shift; mijn $ lijn = shift; $ Lijn = ~ m / afdrukken / en $ lijn = ~ m / vier /; }, ... of ... voorwaarde => sub {my $ op = shift; $ Op-> naam eq 'padsv' en $ Op-> SV> sv = ~ m / fred /; } Het is mogelijk om code in het midden van een uitdrukking in te voegen bij het testen van ops, maar bij het testen van de tekst van de regel code, de gesplitste in code zal altijd de plaats van de hele line.I waarschijnlijk dalen insturen van de opcode in een toekomstige versie, althans voor de voorwaarde / postconditie blokken, of misschien zal ik ze te ruilen naar de 2e arg, zodat ze meer optional.Do niet proberen om tekst in opmerkingen te passen omdat het er niet zal zijn. De code in $ lijn re-gegenereerd uit de bytecode met behulp van B :: Deparse en zal afwijken van de originele broncode op een aantal manieren, met inbegrip van wijzigingen in de opmaak, verandert in een aantal uitdrukkingen en details van de uitdrukkingen, en het formatteren van de code met betrekking tot whitespace.The splicing code zal sterven als het niet lukt om welke reden. Dit zal waarschijnlijk veranderen in mogelijke toekomstige versions.There zijn ook label en line argumenten die randvoorwaarden te creëren voor u, voor eenvoudige gevallen. Natuurlijk moet je niet gebruik maken van lijn voor iets anders dan eenvoudig experimentation.References om lexicale variabelen in de code te injecteren worden vervangen door verwijzingen naar de lexicale variabelen met dezelfde naam in de locatie van de code wordt ingebracht. Als een variabele met dezelfde naam bestaat daar niet, het is een fout. ... maar waarschijnlijk niet een fout, althans in de gevallen waarin de code wordt gesplitst in verklaart lexicale mijn of wanneer de variabele geheel buiten werd initiailized van het deelblok wordt gesplitst in en is alleen gesloten over door it.See de opmerkingen in de broncode (aan de top, in een mooi blok) voor mijn todo / gewenste eigenschappen. Laat me weten of er sprake is van functies in daar of toch unsuggested die je wilt. Ik zal ze niet beloven, maar ik zou willen horen over hen. Vereisten: · Perl


Code :: splice Gerelateerde software

Neem

NEEM is een bibliotheek die een implementatie van epidemische multicast biedt. ...

148

Downloaden