[Rio-pm] [Fun - passa tempo] Cifra de Vigenère

Tiago Peczenyj tiago.peczenyj em gmail.com
Segunda Novembro 11 03:57:14 PST 2013


vejamos

anteriormente as suas funcoes recebiam 2 parametros

agora elas leem os parametros a partir dos atributos e eu acho isso...
esquisito.

veja só, não ha muita razão para armazenar estes dois atributos nessa
classe. vc tem que pensar em termos de Objetos.

vc tem um objeto que SABE fazer encode / decode. no maximo vc poderia
armazenar a chave como atributo e assim reusar o objeto para encodar um
texto a ser recebido.

AGORA, vc tem o erro por que deve estar fazendo algo de muito creativo aqui
(ai envolve explicação sobre list context e atribuição):

my (@word, @key) = (tochar($self->word), tochar($self->key));

tente fazer

my @key  = tochar($self->key);
my @word = tochar($self->word);



2013/11/11 Aureliano Guedes <guedes_1000 em hotmail.com>

> Bom, parece que to enferrujado mesmo, fazia um tempinho que não programava
> em Perl.
>
> Tem um outro probleminha ocorrendo.
>
> Aqui -> http://pastebin.com/XJ512YYx na classe, esta retornando o
> seguinte erro
> Use of uninitialized value $_[0] in chr at Vigenere.pm line 22.
>
> A linha 22 é
> sub isalpha{chr ($_[0]) =~ /[a-zA-Z]/}
>
> Mas, eu criei esse package a partir desse script aqui ->
> http://pastebin.com/svEkjFJj
>
> Que tem a mesma rotina escrita da mesma forma.
>
> Por algum motivo funciona em um e em outro não.
>
> Por que será??
>
> É o $_[0]??
>
> ------------------------------
> From: bruno.buss em gmail.com
> Date: Sun, 10 Nov 2013 23:39:42 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> Oi Aureliano,
>
> Quando você define um atributo como required no Moose, você precisa
> passa-lo pelo construtor do seu objeto (new()).
>
> No caso, seu código ficaria assim:
>
> [...]
> my $a = Vigenere->new( key => 'cinco', word => 'teste' );
> say "Resultado: " . $a->encode();
>
>
>
> 2013/11/10 Aureliano Guedes <guedes_1000 em hotmail.com>
>
> #!usr/env/bin perl
>
> use feature 'say';
> use common::sense;
> use Vigenere;
>
> my $a = Vigenere->new();
> $a->key('cinco');
> $a->word('teste');
>
>
> say "Resultado: " . $a->encode();
>
> ------------------------------
> From: tiago.peczenyj em gmail.com
> Date: Sun, 10 Nov 2013 22:42:46 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> mostra o codigo
>
>
> 2013/11/10 Aureliano Guedes <guedes_1000 em hotmail.com>
>
> Certo, mas eu estou preenchendo os atributos, a não ser que eu esteja
> preenchendo de forma errada.
>
> ------------------------------
> From: tiago.peczenyj em gmail.com
> Date: Sun, 10 Nov 2013 22:22:14 -0200
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> sim pq este erro vem do fato que este atributo é requerido
>
> se vc quer dar uma mensagem mais bonitinha pro usuario, valide os imputs
> no seu script antes de instanciar a classe. assim vc separa as coisas :)
>
>
> 2013/11/10 Aureliano Guedes <guedes_1000 em hotmail.com>
>
> Bom, usei o Moose como recomendou, mais pratico.
> Quanto ao if, realmente foi falta de atenção, deveria ser um && no lugar
> da virgula.
>
> Mas o erro que retorna é
> Attribute (key) is required at C:/Perl/site/lib/Moose/Meta/Attribute.pm
> line 519
>
> Por algum motivo, é como se não fosse atribuido valor algum a key.
>
> Quanto ao metodo BUILD é que como ja tinha o codigo quase pronto fiquei
> com preguissa de usar para validar, mas vou mudar para que word e key
> tenham o mesmo tamanho sempre.
>
>
>
> ------------------------------
> From: tiago.peczenyj em gmail.com
> Date: Sun, 10 Nov 2013 21:00:04 -0200
> To: rio-pm em pm.org
>
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> Aureliano
>
> com Moose vc pode marcar um atributo como required. assim se alguem
> esquecer ele na hora de inicializar a classe haverá uma mensagem de erro.
>
> has 'word' =>(
>                 is => 'rw',
>                 isa => 'Str',
>                 required => 1,
> );
>
> melhor do que utilizar 'default' para validação. eu uso MUITO o default
> mas justamente para inicializar o que eu preciso.
>
> alias se vc precisa validar o tamanho da chave e do texto, vc poderia
> utilizar BUILD para isso.
>
> http://search.cpan.org/dist/Moose/lib/Moose/Manual/Construction.pod
>
> agora o que vc quer dizer com isso?
>
> if (isalpha($word[$a]), isalpha($key[$a])){
>
> o que é um if com virgula?
>
>
> 2013/11/10 Aureliano Guedes <guedes_1000 em hotmail.com>
>
> Bom, fiz as mudanças aconselhadas e mais outras,
> ainda transformei em uma classe.
>
> Vigenere.pm-> http://pastebin.com/aL4brPZx
> Script teste -> http://pastebin.com/nbuqPqUr
>
> Ou-> https://www.dropbox.com/sh/4diypsz4y2puvxq/t0HuRZLvZW/Vigenere_Perl
>
> Por algum motivo tem alguma coisa dando errado com o Moose, ainda não
> identifiquei, alguém ai sabe o que poderia ser??
> ------------------------------
> From: nuba em fastmail.fm
> To: rio-pm em pm.org
> Date: Sun, 10 Nov 2013 04:16:56 -0200
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
>
>
>
>
> On Sun, Nov 10, 2013, at 01:13 AM, Tiago Peczenyj wrote:
>
> 3- use map :)
>
> ao inves de
>
>         my @b = split (//, $c);
>         for (my $i = 0; $i < @b; $i++){
>                 $b[$i] = ord $b[$i];
>         }
>
> podes fazer
>
> return map { ord } split //, $c;
>
>
> quer enxugar mais uma gota? faz
>
> map ord, split //, $c;
>
> :)
>
> --
> Nuba R. Princigalli nuba em pauleira.com http://pauleira.com @nprincigalli
> Discipline is not an end in itself, just a means to an end. - King Crimson
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://about.me/peczenyj
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://about.me/peczenyj
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Tiago B. Peczenyj
> Linux User #405772
>
> http://about.me/peczenyj
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Bruno C. Buss
> http://www.brunobuss.net
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20131111/fb592c0d/attachment-0001.html>


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