[Cascavel-pm] use Template

Igor Sutton igor.sutton em gmail.com
Terça Janeiro 9 09:21:09 PST 2007


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.plline 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.plline 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>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070109/1ab5f2a1/attachment-0001.html 


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