[Cascavel-pm] Re: uso de __DATA__ com hierarquia de classes e Template Toolkit

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Segunda Janeiro 7 10:40:02 PST 2008


Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Dezembro 5 01:14:19 PST 2007 wrote:

> Onde estah o codigo de leitura do __DATA__ ? Ler do 
> __DATA__ nao eh
> trivial, especialmente quando voce estah tentando
ler
> de um __DATA__ que
> nao eh o seu proprio.

É dureza... mas dá para fazer com manipulação da
tabela de símbolos. O único inconveniente é que você
consegue recuperar os dados na primeira leitura,
depois dá erro.

> Eu recomendo que voce transcreva teus templates em
um > inline string
> dentro de um metodo na classe filha. Assim, fica
mais > simples de
> entender o que voce estah colocando ali.

Eu estava usando isso. Mas dar manutenção em código
assim é um porre. Sem contar que fazer escape do
código também é um inferno. Depois do __DATA__, tudo
fica muito mais fácil. Com o TT eu ainda consegui
gerar código identado.

> Bom, isso se voce quiser continuar com esta solucao 
> complicada.

Parece limpo pra mim. Mas usar a tabela de símbolos é
realmente complicado. A sintaxe é ruim, nada
intuitiva. Tive que fazer alguns testes antes de
chegar no que queria.

> Voce ainda me deve:
> 
> 1. Status;

Ainda preciso fazer mais testes e colocar um POD. Mas
isso aí vai pro CPAN.

> 2. Codigo de leitura do __DATA__ que voce estah 
> usando.

O código abaixo é funcional:

<code>
package File::Validate::Template;
use Carp qw(confess);
use strict;
use warnings;

sub new {

    my $class = shift;
    my $self;

    {
        no strict;
        $self = { data_handle => *{"$class\::DATA"} };

    }

    bless $self, $class;

    return $self;

}

sub get_code {

    my $self = shift;
    my $buffer;

    # turn on slurp mode
    local $/;

    my $handle = $self->{data_handle};

    $buffer = <$handle>;

    confess "No data from __DATA__ file handle" unless
( defined($buffer) );

    return \$buffer;

}

1;
</code>

[]'s



Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r em yahoo.com.br
http://www.imortais.cjb.net
-----------------------------------------------------------------------
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1


      Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/


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