[Cascavel-pm] Res: use Template

Patty Silva ptfzs em yahoo.com.br
Terça Janeiro 9 09:30:20 PST 2007


Oiiiiiiiiiii Igor :)
Obrigada...



Consegui resolver...
$t->process(\$format,$data_ref,$arquivo_saida); ao invez de: $t->process(\*DATA,$data_ref,$arquivo_saida) 

Atribui o formato de saida a variavel Format :) ai funcionou


[]sss

----- Mensagem original ----
De: Igor Sutton <igor.sutton em gmail.com>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Terça-feira, 9 de Janeiro de 2007 17:21:09
Assunto: Re: [Cascavel-pm] use Template


Oi Patty,

Primeirissima coisa:

use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;




use strict;


use warnings;


use strict;


use warnings;




use strict;


use warnings;


Agora continuando...





Em 09/01/07, Patty Silva <ptfzs em yahoo.com.br> escreveu:
Ola Pessoal.. estou usando o Template porem nao estou conseguindo fazer a gravacao em diversos arquivo ele so grava no 1 arquivo..


meu codigo resumido.....:
Eu leio de um diretorio diversos arquivos e se dentro do arquivo possuir erro ele me gera um LOG ....

#!/usr/bin/perl


use Template;
.................
opendir (DIR, $basedir) or die "Problemas ao abrir diretorio: $!";


while (my $file = readdir(DIR)) 
{
    next if $file eq '.' or $file eq '..';
    
    chdir($dir) || die "\n *** Erro no diretorio $dir ***";
    
    $file=~ /(\d\d\d\d\d\d)/;




Aqui tá errado, não seria $1?



    $arquivo_saida="$".".log_error";



Use o formato de open com três parâmetros, e de preferência com variáveis escalares (Hrm... Acho que isto já foi dito uma vez...). Ah! Claro! Perl não é telepata! Você tem que pedir para ele te dizer por que não abriu o arquivo (Variável $!):


open my $fh, "<", $file or die "Nao pode acessar o arquivo: $!";



    open(FH,
 "<$file") or die("Nao pode acessar o arquivo");

    while(<FH>)
    {     .....................................................



$bla não é nome de variável. 




        if($bla eq 'erro')
        {



Ponto e vírgula! Sempre! Mesmo que seja o último comando e o Perl não encha seu saco. Depois você coloca uma instrução abaixo desta linha e dá caca, aí você vem perguntar a razão.




           push @erros, { var => $nome,data => $data}
        }
        
        
       
      }



unlink $file or warn "Não removi o arquivo: $!"; 




unlink($file);

chdir($dirlog);


$tamanho = @erros;

my $data_ref = {

    erros => \@erros,
};


my $t = Template->new;



Segundo perldoc Template:

$t->process(...) or die $template->error(); 




$t->process(\*DATA,$data_ref,$arquivo_saida) 



}

-----------------------------------------------------------------------------------------------------------

close(FH);
closedir(DIR);

$dbh->disconnect();

dbmclose %DBM;


__DATA__


ERRO
[% FOREACH id = erros %]

---------------------------------------------------------------------------------

Variavel: [%nome%] Data: [% data %] 
---------------------------------------------------------------------------------

[% END %]




Quando tem diversos arquivos ele gera so do 1 e da o seguinte erro nos outros:

Use of uninitialized value in substr at 
/usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi/Template/Provider.pm line 1044, <DATA> chunk 1.




Alguem pode dizer o que pode ser??



Adicionando strict e warnings no seu programa:

[igor em roy ~]$ perl -c patty.pl 
Global symbol "$basedir" requires explicit package name at 
patty.pl line 8.
Global symbol "$dir" requires explicit package name at patty.pl line 13.
Global symbol "$dir" requires explicit package name at patty.pl line 13.
Global symbol "$arquivo_saida" requires explicit package name at 
patty.pl line 16.
Global symbol "$bla" requires explicit package name at patty.pl line 22.
Global symbol "@erros" requires explicit package name at patty.pl line 23.
Global symbol "$nome" requires explicit package name at 
patty.pl line 23.
Global symbol "$data" requires explicit package name at patty.pl line 23.
Global symbol "$dirlog" requires explicit package name at patty.pl line 30.
Global symbol "$tamanho" requires explicit package name at 
patty.pl line 32.
Global symbol "@erros" requires explicit package name at patty.pl line 32.
Global symbol "@erros" requires explicit package name at patty.pl line 34.
Global symbol "$arquivo_saida" requires explicit package name at 
patty.pl line 38.
Global symbol "$dbh" requires explicit package name at patty.pl line 45.
Global symbol "%DBM" requires explicit package name at patty.pl line 47.
patty.pl had compilation errors.


Ah! Isso quer dizer que os tracinhos sem importância que estavam no meio do seu código são linhas que não fazem diferença prá gente?

Posta o código completo, que pelo menos passe no teste do "perl -c" daí a gente continua a conversa.



Antes que você me xingue denovo, eu acredito que você tenha condições de fazer a coisa certa e aprender, mas não é isso que parece estar acontecendo...


-- 
Igor Sutton Lopes <
igor.sutton em gmail.com>
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm





__________________________________________________
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070109/5e909f63/attachment.html 


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