[Cascavel-pm] Re: Digest Cascavel-pm, volume 25, assunto 4
Graciliano M. P.
gmpowers em terra.com.br
Sexta Janeiro 9 13:36:38 CST 2004
> Tipo, estou com uma dúvida.
> Existe alguma maneira de apagar os valores de todas as variáveis
existentes?
> Algo no estilo undef $*;
> Sei lá.. é que, como sabem, alguns valores ficam salvo na memória quando
utilizado o mod_perl e pra evitar que estes valores implicassem em erros em
execuções posteriores, preciso tirar tais valores.
> O uso do my não é viável, já que utilizo um arquivo de complemento com as
funções principais e o chamo através do require, e caso eu esteja usando o
my, as variáveis do arquivo em questão não são > > passadas pro script que
está sendo executado.
>
> Espero ter sido 'entendível' :)
>
> Abraços a todos ;)
>
> Gabriel Vieira
Vc pode dar uma olhada na função reset(), mas não é muit utilizada, pois vc
define uma faixa para os nomes da variáveis. Dê uma olhada em:
http://www.perldoc.com/perl5.8.0/pod/func/reset.html
Ou podes utilizar uma função que scaneia a tabela de símbolos retornando
apenas as variáveis globais, e depois dar undef em cada uma:
## Adaptado de Safe::World::scanpack_table()
sub scanvars {
my ( $packname ) = @_ ;
$packname .= '::' unless $packname =~ /::$/ ;
no strict "refs" ;
my $package = *{$packname}{HASH} ;
return unless defined $package ;
no warnings ;
local $^W = 0 ;
my @table ;
my $fullname ;
foreach my $symb ( keys %$package ) {
$fullname = "$packname$symb" ;
if ( $symb !~ /::$/ && $symb !~ /[^\w:]/ && $symb !~ /^\d$/ && $symb !~
/^(?:INC|ENV|SIG|ARGV|_)$/ ) {
my $ok ;
if (defined $$fullname) { push(@table , "\$$fullname") ; $ok = 1 ;}
if (defined %$fullname) { push(@table , "\%$fullname") ; $ok = 1 ;}
if (defined @$fullname) { push(@table , "\@$fullname") ; $ok = 1 ;}
if (defined &$fullname) { $ok = 1 ;}
if (*{$fullname}{IO} && fileno $fullname) { $ok = 1 ;}
if (!$ok && $symb !~ /^(?:BEGIN|END|INIT)$/ ) { push(@table ,
"\$$fullname") ;}
}
}
return( @table ) ;
}
$global_x = 123 ;
my @vars = scanvars('main');
foreach my $vars_i ( @vars ) {
eval("undef $vars_i ;") ;
}
Agora quanto a estrutura do seu programa eu a abomino completamente,
principalmente por ser executado em mod_perl, que foi feito para módulos OO!
Procure utilizar Orientação a Objetos, vc vai ver que o mundo pode ser bem
melhor.
Atenciosamente,
Graciliano M. P.
Mais detalhes sobre a lista de discussão Cascavel-pm