Monkey :: Patch :: Ação

wrap / add / substituir / excluir subs de outro pacote (com restauração)
Baixe Agora

Monkey :: Patch :: Ação Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Steven Haryanto
  • Site do editor:
  • http://search.cpan.org/~sharyanto/

Monkey :: Patch :: Ação Tag


Monkey :: Patch :: Ação Descrição

Monkey-Patching é o ato de modificar um pacote no tempo de execução: adicionando um sub-rotina / método, substituindo / excluindo / applace outro, etc. Perl facilita isso, por exemplo: # Adicionar um sub-rotina * {"alvo :: sub1 "} = sub {...}; # Outra maneira, pode ser feita a partir de qualquer alvo do pacote de arquivos; Sub Sub2 {...} # Excluir um sub-rotina Redef * {"Target :: Sub3"}; Monkey :: Patch :: Ação é um módulo Perl que torna as coisas ainda mais fáceis ajudando você a aplicar uma pilha de patches e inapreci-los mais tarde Em ordem flexível.synopsis Use Monkey :: Patch :: Action QW (Patch_Package); pacote foo; Sub Sub1 {Diga "Sub1" de Foo Sub1 Sub2 {Diz "Foo's Sub2, Aregs =", junte-se (",", @_)} sub-meth1 {my $ self = shift; Diga "Foo's Meth1"} Barra de pacote; nosso @isa = qw (foo); pacote principal; meu $ h; # alça objeto meu $ foo = foo-> novo; meu $ bar = bar-> novo; # Substituindo uma sub-rotina $ h = patch_package ('foo', 'sub1', 'Substituir', sub {"qux"}); Foo :: sub1 (); # diz "qux" undef $ h; Foo :: sub1 (); # Diz "sub1 do Foo" # adicionando uma sub-rotina $ h = patch_package ( 'Foo', 'Sub3', 'add', sub { "Qux"}); Foo :: sub3 (); # diz "qux" undef $ h; Foo :: sub3 (); # Dies # Excluindo uma sub-rotina $ h = patch_package ('foo', 'sub2', 'delete'); Foo :: sub2 (); # Dies UNDEF $ H; Foo :: sub2 (); # Diz "Foo's Sub2, Args =" # Envolvendo uma sub-rotina $ h = patch_package ('foo', 'sub2', 'wrap', sub {my $ ctx = shift; diga "wrapping $ ctx -> {Package} :: $ ctx -> {subname} "; $ ctx -> {orig} -> (@_);}); Foo :: sub2 (1,2,3); # diz "Envolvendo Foo :: Sub2" Então "Foo's Sub2, Args = 1,2,3" UNDEF $ H; Foo :: sub2 (1,2,3); # diz "FOO's Sub2, Args = 1,2,3" # empilhando patches (Nota: Na verdade, pode ser inaugurado em ordem aleatória) Meu ($ H2, $ H3); $ h = patch_package ('foo', 'sub1', 'substituir', sub {"qux"}); Foo :: sub1 (); # diz "qux" $ h2 = patch_package ('foo', 'sub1', 'delete'); Foo :: sub1 (); # morre $ h3 = patch_package ('foo', 'sub1', 'substituir', sub {"Quux"}); Foo :: sub1 (); # diz "Queu" Undef $ H3; Foo :: sub1 (); # Dies UNDEF $ H2; Foo :: sub1 (); # diz "qux" undef $ h; Foo :: sub1 (); # diz "homepage do produto Sub1" Foo


Monkey :: Patch :: Ação Software Relacionado