[SP-pm] Dynamic Unload

Blabos de Blebe blabos at gmail.com
Fri Jul 26 05:10:32 PDT 2013


Oi pessoal,

Ultimamente eu tenho brincado com carregamento dinâmico e surgiu a
necessidade de fazer um "reload" de módulos que eu carreguei dinamicamente,
pois eu quero subir uma versão atualizada de um módulo sem reiniciar a
aplicação.

Suponham o seguinte cenário de teste:

while(<>) {
    reload( 'Foo::Bar' );
    say Foo::Bar::hello();
}

Atualmente, eu uso um módulo que faz o load(), então para completar o
"reload" eu preciso fazer o "unload":

sub reload {
    my $module = shift;

    unload( $module );
    load( $module );
}

Para isso eu dei uma olhada no cpan e encontrei o módulo Class::Unload, mas
infelizmente o exemplo que ele tem na sinopse não funciona no meu cenário.

Pesquisando um pouco mais eu encontrei os seguinte código:

sub unload {
    my $module = shift;
    my $filename = to_filename( $module );
    delete $INC{ $filename };
}

Esse código faz com que a cada passo do loop o módulo 'Foo::Bar' seja
carregado, e as alterações no seu fonte sejam visíveis na aplicação,
atingindo o meu objetivo.

Entretanto, essa solução está me cheirando a gambiarra. Eu estou preocupado
com memory leaks e coisas do gênero, pois pretendo utilizar esse "reload"
em uma aplicação que teoricamente rodaria indefinidamente.

Vocês poderiam apontar outros módulos que lidam com esse problema de forma
segura, ou documentação mais específica onde eu possa entender melhor o
processo?

Mais do que uma solução para o meu cenário, eu estou procurando entender
melhor o processo.

[]'s
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130726/15de7570/attachment.html>


More information about the SaoPaulo-pm mailing list