[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