Código :: Splice.

Código :: Splice injetou o conteúdo de uma sub-rotina em um ponto especificado em outro lugar.
Baixe Agora

Código :: Splice. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Scott Walters and Brock Wilcox
  • Site do editor:
  • http://search.cpan.org/~swalters/

Código :: Splice. Tag


Código :: Splice. Descrição

Código :: Splice injetou o conteúdo de uma sub-rotina em um ponto especificado em outro lugar. Código :: Splice Injeta o conteúdo de uma sub-rotina em um ponto especificado, o Elsewhere.Synopsis Use o código :: Splice; Código :: Splice :: Injectar (Código => Sub {Imprimir "FREDN";}, pacote => 'principal', método => 'foo', pré-condições => sub {my $ op = shift; minha $ linha = shift $ linha = ~ m / print / e $ line = ~ m / quatro /;}, postcondition => sub {my $ op = shift; minha $ linha = shift; $ line = ~ m / print / e $ line = ~ m / cinco /;},); sub foo {imprimir "onen"; Imprimir "Twon"; Imprimir "Threen"; Imprimir "Fourn"; Imprimir "Fiven"; } Este módulo remove o conteúdo de uma sub-rotina (geralmente uma sub-rotina anônima criada apenas para fins) e emendas no programa em outro lugar. Por que você pergunta? Escreva testes unitários mais fortes do que a granularidade da API, de outra forma, permitiria que os testes de unidades de gravação Nasty, interdependente código de speegretti (minha motivação - Ei, você tem que ter testes antes de poder iniciar a refatoração, e se você não puder escrever testes para o código, você está aparafusado) corrigir erros estúpidos e remover restrições estúpidas no código de outras pessoas De uma maneira que é mais resiliant em atualizações do que editar arquivos que você não possui o que "aspectos" deve ser parafusar com seus orkers de vaca, introduzindo o Monster Heisenbugs jogar com código auto-modificador, escreva o código auto-replicante (mas seja bom, RE todos os amigos aqui, certo?) Os específicos: o bloco do corpo do código {} são extraídos da sub-rotina e inseridos em um local no código especificado pela função Call para a Splice (). Onde o novo código é emendado, o código antigo é vendido. Os argumentos do pacote e do método são necessários e informam a coisa como encontrar o código a ser modificado. O argumento de código é necessário, pois especifica o código a ser vendido. Esse mesmo bloco de código não deve ser usado para qualquer outra coisa sob penalidade de Coredump. O restante dos argumentos especifica onde o código deve ser inserido. Qualquer número de argumentos pré-condicionados e pós-concondicionamento fornecem retornos de chamada para localizar a área exata para abranger o código em. Antes que o código possa e seja emendado, todos os blocos de pré-condição devem ter retornado true, e nenhum dos blocos de pós-concondicionamento ainda pode ter retornado verdadeiro. Se uma pós-ponderição retornar TRUE antes de todos os blocos de pré-condição tiver, um erro será levantado. Ambos os blocos são chamados de várias vezes por linha e se passar uma referência ao objeto B OP atualmente em consideração e o texto da linha atual: Precondition => Sub {My $ op = Shift; minha $ linha = turno; $ line = ~ m / print / e $ line = ~ m / quatro /; }, ... ou ... pré-condição => Sub {My $ op = Shift; $ op-> nome eq 'padsv' e $ op-> sv-> sv = ~ m / fred /; }, É possível inserir código no meio de uma expressão ao testar OPS, mas ao testar o texto da linha de código, o código emendado sempre substituirá a linha inteira. Vou provocar o envio na opcode em um Versão futura, pelo menos para os blocos de pré-condição / pós-condicionamento, ou talvez eu os troque até o 2º ARG, então eles são mais opcionais. Não tente combinar texto em comentários, pois não estará lá. O código em $ line é re-gerado a partir do bytecode usando B :: Doarse e irá variar do código-fonte original de algumas maneiras, incluindo alterações para formatação, alterações para alguns idiomas e detalhes das expressões e formatação do código Com relação ao espaço em branco. O código de splicing morrerá se falhar por qualquer motivo. Isso provavelmente mudará em possíveis versões futuras. Eles também são rótulos e argumentos de linha que criam pré-condições para você, para casos simples. Claro, você não deve usar a linha para qualquer coisa que não seja simples experimentação.Referências para variáveis lexicais no código a serem injetadas são substituídas por referências às variáveis lexicais do mesmo nome no local que o código é inserido. Se uma variável do mesmo nome não existir, é um erro. ... mas provavelmente não deveria ser um erro, pelo menos nos casos em que o código que está sendo respeitado em declara que lexical com o meu, ou quando a variável foi iniciada inteiramente fora do subclotal sendo vendido em e foi apenas fechado Por ele. Veja os comentários no código-fonte (no topo, em um bloco agradável) para meus recursos TODO / desejados. Deixe-me saber se há alguma característica lá ou ainda sem problemas que você deseja. Eu não vou prometê-los, mas gostaria de ouvir sobre eles. Requisitos: · Perl.


Código :: Splice. Software Relacionado

Neem.

Neem é uma biblioteca que fornece uma implementação de multicast epidêmica. ...

148

Download