<div dir="ltr">Oi pessoal,<div><br></div><div style>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.</div>

<div style><br></div><div style>Suponham o seguinte cenário de teste:</div><div style><br></div><div style>while(<>) {</div><div style>    reload( 'Foo::Bar' );</div><div style>    say Foo::Bar::hello();</div>

<div style>}</div><div style><br></div><div style>Atualmente, eu uso um módulo que faz o load(), então para completar o "reload" eu preciso fazer o "unload":</div><div style><br></div><div style>sub reload {</div>

<div style>    my $module = shift;</div><div style><br></div><div style>    unload( $module );</div><div style>    load( $module );</div><div style>}</div><div style><br></div><div style>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.</div>

<div style><br></div><div style>Pesquisando um pouco mais eu encontrei os seguinte código:</div><div style><br></div><div style>sub unload {</div><div style>    my $module = shift;</div><div style>    my $filename = to_filename( $module );</div>

<div style>    delete $INC{ $filename };</div><div style>}</div><div style><br></div><div style>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.</div>

<div style><br></div><div style>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.</div>

<div style><br></div><div style>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?</div><div style><br></div><div style>

Mais do que uma solução para o meu cenário, eu estou procurando entender melhor o processo.</div><div style><br></div><div style>[]'s</div></div>