[Cascavel-pm] RE: [Cascavel-pm] Passando diversos arraies para uma função !

Solli Moreira Honorio shonorio em terra.com.br
Segunda Junho 23 20:53:32 CDT 2003


Já descobri que a mensagem é problema sério....

'    Scalars leaked: %d
        (P) Something went wrong in Perl's internal bookkeeping of
scalars: not all scalar variables were deallocated by the time Perl
exited. What this         usually indicates is a memory leak, which is
of course bad, especially         if the Perl program is intended to be
long-running.'


> -----Original Message-----
> From: Solli Moreira Honorio [mailto:shonorio em terra.com.br]
> Sent: Monday, June 23, 2003 10:27 PM
> To: 'cascavel-pm em mail.pm.org'
> Subject: RE: [Cascavel-pm] Passando diversos arraies para uma função !
> 
> Pessoal,
> 
> Achei interessante as alternativas, mas o código que estou tentando
> desenvolver tem pretenções universais, por isto eu gostaria de adotar
'the
> best Perl practices' :)
> 
> Bom, andei pensando (xiiiii)... Pq não usar referências com thread ? E
> resolvi ir ao extremo, criei uns testes malucos, como no código
abaixo. O
> resultado foi aparentemente bom, mas surgiu a mensagem 'Scalars
leaked:
> 1', no qual estou pesquisando ainda.
> 
> A questão é: Pensando mais na questão de segurança do código, do que
na
> performance, vocês acreditam que pode ser seguro fazer algo como no
código
> louco exemplo que estou enviando, ou utilizar hash para passar estas
> arraies.
> 
> Abraços,
> 
> Solli
> 
> #===== Código =====
> use 5.008;
> use strict;
> use threads;
> use warnings;
> use diagnostics;
> use threads::shared;
> 
> my @Threads;
> Start (\@Threads);
> End   (\@Threads);
> 
> sub End
> {
>     my ( $T ) = @_;
>     foreach my $Thread ( @{$T} )
>     {
>         my $Temp = $Thread->join();
>         print $Temp;
>     }
> }
> 
> 
> sub Start
> {
>     my ( $T ) = @_;
>     my %Hash;
>     @{$Hash{'Frutas'}{'Elemento1'}}  = qw (Abacaxi Banana Morango);
>     @{$Hash{'Frutas'}{'Elemento2'}}  = qw (Amora Caqui Jaboticaba);
>     @{$Hash{'Verbos'}{'Elemento1'}}  = qw (Amar Casar Catar);
>     @{$Hash{'Verbos'}{'Elemento2'}}  = qw (Agir Nadar Tentar);
>     @{$Hash{'Nomes'}{'Elemento1'}}   = qw (Pedro Paulo Joana);
>     @{$Hash{'Nomes'}{'Elemento2'}}   = qw (Maria Lucia Cristina);
>     @{$Hash{'Cidades'}{'Elemento1'}} = qw (Campinas Maresias Poa);
>     @{$Hash{'Cidades'}{'Elemento2'}} = qw (Americana Jales Urania);
> 
>     foreach my $Elemento (sort keys %Hash)
>     {
>         push @{$T}, threads->create(\&Test, $Elemento,
> \@{$Hash{$Elemento}{'Elemento1'}}, \@{$Hash{$Elemento}{'Elemento2'}});
>     }
> 
> }
> 
> sub Test
> {
>     my ($Elemento, $T01, $T02) = @_;
>     print "Inicio de processamento do elemento $Elemento...\n";
>     sleep (30);
>     print "Final de processamento do elemento $Elemento...\n";
>     return "\tO elemento $Elemento continha : " . join (' ', @{$T01})
. "
> "  . join (' ', @{$T02}) . "\n";
> }
> 
> #==== output ===
> Inicio de processamento do elemento Cidades...
> Inicio de processamento do elemento Frutas...
> Inicio de processamento do elemento Nomes...
> Inicio de processamento do elemento Verbos...
> Final de processamento do elemento Cidades...
> 	O elemento Cidades continha : Campinas Maresias Poa Americana
Jales
> Urania
> Final de processamento do elemento Frutas...
> 	O elemento Frutas continha : Abacaxi Banana Morango Amora Caqui
> Jaboticaba
> Final de processamento do elemento Nomes...
> 	O elemento Nomes continha : Pedro Paulo Joana Maria Lucia
Cristina
> Final de processamento do elemento Verbos...
> Scalars leaked: 1
> Scalars leaked: 1
> Scalars leaked: 1
> Scalars leaked: 1
> 	O elemento Verbos continha : Amar Casar Catar Agir Nadar Tentar
> 
> 
> > -----Original Message-----
> > From: cascavel-pm-admin em mail.pm.org [mailto:cascavel-pm-
> admin em mail.pm.org]
> > On Behalf Of Fabiano Reese Righetti
> > Sent: Monday, June 23, 2003 4:01 PM
> > To: cascavel-pm em mail.pm.org
> > Subject: Re: [Cascavel-pm] Passando diversos arraies para uma função
!
> >
> > On 23 Jun 2003 14:10:10 -0300, Nelson Ferraz wrote
> > > > > Bom,  normalmente sempre  passo referencias  para as  funções,
é
> > mais
> > > > > rápido, e por este motivo nunca  tive nenhum problema, mas
agora
> > estou
> > > > > programando com thread  e estou evitando esta técnica  para
evitar
> > dor
> > > > > de cabeça no futuro, mas estou tento agora.
> > > >
> > > >     Nessa situação, é preciso usar referências!
> > >
> > > Partindo do principio que ele _nao quer_ usar referencias, uma
> possivel
> > > solucao seria transformar os arrays em strings (join), e de volta
em
> > > arrays (split)...
> > >
> > > []s
> > >
> > > Nelson
> >
> >    Olá.
> >    Partindo deste ponto de vista. Podemos também "forçar a coisa",
> > utilizando-se do jeitinho brasileiro :). Algo como:
> >
> > &bla(@array, $elemento);
> >
> > sub bla {
> >    my @array = @_;
> >    my @elemento = pop(@array);
> > }
> >
> > ou com dois arrays:
> >
> > &bla(@array01, @array02, $#array02);
> >
> > sub bla {
> >    my @array01 = @_;
> >    my $tamanho = pop(@array01);
> >    my @array02 = @array01[$#array01-$tamanho..$#array01];
> >    splice(@array01,$#array01-$tamanho,$tamanho+1);
> > }
> >
> > []'s
> > --Fabiano Reese Righetti - http://cascavel.pm.org/~fabiano/
> >
> >
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em mail.pm.org
> > http://cascavel.pm.org/mailman/listinfo/cascavel-pm
> >
> > ---
> > Incoming mail is certified Virus Free.
> > Checked by AVG anti-virus system (http://www.grisoft.com).
> > Version: 6.0.491 / Virus Database: 290 - Release Date: 6/18/2003
> >
> 
> ---
> Outgoing mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.491 / Virus Database: 290 - Release Date: 6/18/2003
> 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.491 / Virus Database: 290 - Release Date: 6/18/2003
 




Mais detalhes sobre a lista de discussão Cascavel-pm