[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