Code :: épissure

Code :: L'épissure injecte le contenu d'un sous-programme à un point spécifié ailleurs.
Télécharger maintenant

Code :: épissure Classement & Résumé

Publicité

  • Rating:
  • Licence:
  • Perl Artistic License
  • Prix:
  • FREE
  • Nom de l'éditeur:
  • Scott Walters and Brock Wilcox
  • Site Internet de l'éditeur:
  • http://search.cpan.org/~swalters/

Code :: épissure Mots clés


Code :: épissure La description

Code :: Splice injecte le contenu d'un sous-programme à un point spécifié ailleurs. Code :: Splice injecte le contenu d'un sous-programme à un moment précis elsewhere.SYNOPSIS utilisation Code :: Splice; Code :: Splice :: inject (code => sub {print "fredn";}, package => 'principale', method => 'foo', condition => sous {my $ op = shift; ma ligne $ = changement ; $ ligne = ~ m / print / et $ ligne = ~ m / quatre /;}, postcondition => sub {my $ op = shift; ma ligne $ = shift; $ ligne = ~ m / print / et $ ligne = ~ m / cinq /;}); sous foo {print "Onen"; imprimer "twon"; imprimer "threen"; imprimer "Fourn"; imprimer "fiven"; } Ce module supprime le contenu d'un sous-programme (généralement un sous-programme anonyme créé juste pour le but) et épissures dans le programme elsewhere.Why, demandez-vous? Écrivez plus forts tests unitaires que la granularité de l'API autrement permettre des tests unitaires écriture pour méchant, interdépendant code speghetti (ma motivation - hey, tu dois avoir des tests avant de pouvoir commencer refactoring, et si vous ne pouvez pas les tests d'écriture pour le code, vous êtes foutus) corriger les bugs stupides et supprimer les restrictions stupides dans le code des autres d'une manière qui est plus résilient dans les mises à niveau de l'édition de fichiers que vous n'avez pas ownBe ce « aspects » devrait être vis avec vos cow-es travailleurs en introduisant bug logiciel inhabituel monstre Jouer avec le code automodifiant Ecrire un code auto-répliquant (mais soyez gentil, nous » re tous les amis ici, à droite) les spécificités: le corps du code {} bloc sont extraits du sous-programme et inséré dans un endroit dans le code spécifié par l'appel à la fonction de jonction (). Lorsque le nouveau code est épissé, l'ancien code est épissé. Les arguments de l'emballage et la méthode sont nécessaires et dire la chose comment trouver le code à modifier. L'argument de code est nécessaire, car il spécifie le code à épisser. Ce même bloc de code ne doit pas être utilisé pour toute autre chose sous peine de repos coredump.The des argumets indiquer où le code doit être inséré. Un nombre quelconque d'arguments de condition préalable et fournir postcondition callbacks pour aider à localiser la zone exacte à raccorder le code à. Avant que le code peut e épissé, tous les blocs de condition préalable doit être retourné vrai, et aucun des blocs de postcondition ont peut-être encore retourné vrai. Si une postcondition renvoie true avant que tous les blocs de préconditions ont, une erreur est soulevée. Les deux blocs s'appellent plusieurs fois par ligne et sont transmis une référence à l'objet B OP actuellement à l'étude et le texte de la ligne actuelle: condition => {sous mon op $ = shift; ma ligne $ = shift; $ Ligne = ~ m / print / et $ ligne = ~ m / quatre /; } ... ou ... condition => {sous mon op $ = shift; $ OP-> eq nom 'de padsv' et $ OP-> SV-> sv = ~ m / fred /; }, Il est possible d'insérer du code dans le milieu d'une expression lors du test ops, mais lors du test du texte de la ligne de code, le épissé dans le code remplacera toujours l'ensemble line.I'll probablement tomber dans l'envoi de l'opcode dans un version future, au moins pour la condition / blocs postcondition, ou peut-être que je vais les échanger à la 2ème arg donc ils sont plus optional.Do pas essayer de faire correspondre le texte dans les commentaires qu'il ne sera pas là. Le code en $ ligne est re-générée à partir du bytecode en utilisant B :: Deparse et variera à partir du code source original de plusieurs façons, y compris les changements de mise en forme, des changements à certains idiomes et les détails des expressions, et le formatage du code en ce qui concerne le code d'épissage whitespace.The va mourir si elle échoue pour une raison quelconque. Cela changera probablement à l'avenir versions.There possible sont également des arguments de l'étiquette et la ligne qui créent des conditions préalables pour vous, pour les cas simples. Bien sûr, vous ne devriez pas utiliser la ligne pour autre chose que de simples experimentation.References à des variables lexicales dans le code à injecter sont remplacées par des références aux variables lexicales du même nom dans l'emplacement du code est inséré dans. Si une variable du même nom ne, il est existe pas là une erreur. ... mais il ne devrait probablement pas être une erreur, au moins dans les cas où le code étant épissé déclare que lexical avec mon ou lorsque la variable a été initiailized entièrement en dehors du bloc sous étant épissé et a été fermé seulement sur par it.See les commentaires dans le code source (en haut, dans un bloc agréable) pour mes todo / caractéristiques souhaitées. Permettez-moi de savoir s'il y a des fonctionnalités là-dedans ou encore unsuggested que vous voulez. Je ne vais pas leur promettre, mais je voudrais entendre parler. Exigences: · Perl


Code :: épissure Logiciels associés

Tao :: DBI :: St

TAO :: DBI :: ST est un module Perl pour les déclarations DBI avec support portable pour les espaces réservés nommés. ...

162

Télécharger