[SP-pm] Data Serializer
Luis Motta Campos
luismottacampos at yahoo.co.uk
Thu Jul 31 14:27:31 PDT 2008
Vi wrote:
> S.O: usamos FreeBsd
> Perl: Usamos a versão 5.8.8
> Data::Serializer 0.46
Vi, você parece não saber nada mesmo de Per. Eu recomendo que você leia
o seguintes documentos:
perlintro Perl introduction for beginners
perlreftut Perl references short introduction
perldsc Perl data structures intro
perllol Perl data structures: arrays of arrays
perlboot Perl OO tutorial for beginners
perltoot Perl OO tutorial, part 1
perltooc Perl OO tutorial, part 2
perlbot Perl OO tricks and examples
perlstyle Perl style guide
perlcheat Perl cheat sheet
Todos eles podem ser acessados a partir do shell do seu computador,
assumindo que você tem uma instalação completa de um Perl 5.8.8. Para
exibir a documentação, use o comando "perldoc" e passe como argumento o
nome do documento que você quer ler. Por exemplo, para ler a introdução,
diga
perldoc perlintro
No shell do seu BSD.
> esse eh o código:
[corta]
> Como jah disse antes, sou iniciante em Perl, portanto nao sei se a parte do
> Pacote esta correta (peguei hj um tutorial que explica como funciona OO em
> perl)!
Leia os documentos acima. Eles são o melhor e mais compacto guia para OO
em Perl.
> E tambem nao sei se esta certo usar o mesmo script para a classe(pacote) e
> para a serializacao!
Mais ou menos. Serve bem para um estudo, mas você deveria organizar
melhor os teus fontes, colocando um pacote por arquivo, no máximo.
> Sei lah talvez se separar a classe da serializacao e chamar a classe no
> script onde ocorrera a serializacao funcionaria!?!?!?!!
Esta é a forma correta.
> E como eu passo o objeto a ser serializado?
Por referência, para a função "serialize". Olhe o meu exemplo, abaixo, e
espero que você tenha idéias. Ele tem montes de coisas extras para você
perguntar, por isso não se acanhe. ;)
> E esses são os erros:
> Global symbol "$this" requires explicit package name at serialz.pl line 13.
> Global symbol "$atrb" requires explicit package name at serialz.pl line 15.
> Global symbol "$this" requires explicit package name at serialz.pl line 20.
> Global symbol "$atrb" requires explicit package name at serialz.pl line 20.
> Global symbol "$obj" requires explicit package name at serialz.pl line 25.
> Global symbol "$serialized" requires explicit package name at serialz.pl
> line 33.
> Global symbol "$obj" requires explicit package name at serialz.pl line 33.
> Global symbol "$deserialized" requires explicit package name at serialz.pl
> line 34.
> Global symbol "$obj" requires explicit package name at serialz.pl line 34.
> Global symbol "$serialized" requires explicit package name at serialz.pl
> line 34.
> Global symbol "$deserialized" requires explicit package name at serialz.pl
> line 35.
Todos os seus erros podem ser explicados com o uso do pragma "diagnostics":
perl -wc -Mdiagnostics seu_script.pl
vai te explicar o motivo destes erros. Uma dica: eles não tem nada a ver
com serialização de dados, é uma coisa muito mais básica que isso.
Também recomendo a você ler
perldoc strict
perldoc warnings
perldoc diagnostics
por alto, para ajudar você a entender a mecânica de warnings e erros do
Perl.
Meu Exemplo:
###
#!perl
# "pacotes" (package) ou classes em perl são a mesma coisa
package Data::Object;
use strict;
use warnings;
# O módulo de serialização que você quer usar
use Data::Serializer;
# Constroi métodos de acesso
use base 'Class::Accessor::Fast';
# A mesma coisa que __PACKAGE__, mas para OO
use CLASS;
# Isto constrói funções de acesso
CLASS->mk_accessors(qw( nome sobrenome telefone ));
# Construtor
sub new {
my ( $class, %data ) = @_;
# "bless" vincula o objeto com a classe, muito importante
return bless \%data, $class;
}
1; # todo pacote tem de retornar um valor positivo no final
# Note que eu declarei "package main" apenas por que comecei
# a escrever código para outro pacote, acima. Você pode
# evitar isso colocando pacotes em arquivos separados.
# Declarar o pacote "main" é totalmente opcional, se ele é
# o único que está no arquivo.
package main;
use strict;
use warnings;
my $data_masher = Data::Serializer->new;
my $data = Data::Object->new( nome => 'Luis', sobrenome => 'Motta' );
print "Object name: " . $data->nome . ".\n";
print "Object surname: " . $data->sobrenome . ".\n";
print "Serialized version: " . $data_masher->serialize( $data ) . ".\n";
__END__
Espero que isso ajude.
Putamplexos!
--
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.
More information about the SaoPaulo-pm
mailing list