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

Tiago Peczenyj tiago.peczenyj em gmail.com
Segunda Novembro 11 09:32:21 PST 2013


só falta vc usar o autobox::Core


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

> Corrigi, mudando o código todo
> http://pastebin.com/dqzZXXzM
>
> Agora vou tentar em só uma linha. LOL
>
> ------------------------------
> From: guedes_1000 em hotmail.com
> To: rio-pm em pm.org
> Date: Mon, 11 Nov 2013 14:01:16 +0000
>
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> Eu não entendi quanto a ler o parâmetro a partir do atributo e receber
> dois parâmetros,
>
> mas eu fiz um teste.
>
> Eu criei um método BUILD da seguinte forma
>
> sub BUILD{
> my $self = shift;
> my (@w, @k);
> @w = split (//, $self->word);
>  @k = split (//, $self->key);
> croak "'key' and 'word' are diferent lenght\n"
> if($#w != $#k);
>  foreach (@w and @k){
> croak "'key' and 'word' need to be letter\n"
> unless($w[$_] =~ /[a-zA-Z]/ || $k[$_] =~ /[a-zA-Z]/);
>  }
> }
>
> Então é conferido se 'word' e 'key' tem o mesmo tamanho (você me
> aconselhou fazer isso no BUILD),
> aproveitei e retirei a rotina 'isalpha' que conferia se o caractere eram
> letras e coloquei para conferir isso no BUILD também
> (não sei se é muita POG).
>
> sub isalpha{(chr shift) =~ /[a-zA-Z]/}   #<-line 22
> Use of uninitialized value $_[0] in chr at Vigenere.pm line 22.
>
> Antes de fazer isso o erro que retornava apontava para a linha do
> 'isalpha', agora está apontando para a linha do 'toupper', que é uma função
> que traduz o hex ASCII para caracter, passa para upcase e retorna como hex
> denovo (logo 97 vira 65, assim por diante).
>
> sub toupper{ord(uc chr $_[0])}  #<- line 25
> Use of uninitialized value $_[0] in chr at Vigenere.pm line 25.
>
> Tentei debugar mas não entendi nada, mas de qualquer forma eu acho que o
> problema é eu tentar tratar usando essa string "$_[0]",
> não sei se estou falando besteira, mas como o script teste.pl herda a
> classe, parece que a rotina tenta receber a string do script e não do
> módulo.
>
> ------------------------------
> From: tiago.peczenyj em gmail.com
> Date: Mon, 11 Nov 2013 09:57:14 -0200
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère
>
> 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
>
> _______________________________________________ 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
>
> _______________________________________________
> 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/722d813e/attachment-0001.html>


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