nao pensa em reduzir tanto. tem que ficar legivel
2013/11/11 Aureliano Guedes <[email protected]> > Tava tentando achar um jeito de remover esse laço 'for'. > E talvez reduzir para 1 linha de código. > se ja reduziu de 30 linhas para 5, talvez seja possível. > > ------------------------------ > From: [email protected] > Date: Mon, 11 Nov 2013 20:10:26 -0200 > > To: [email protected] > Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère > > my @word = $ARGV[0]->uc->split('')->map( sub{ $_->ord} ); > > ou > > my @word map { ord $_ } split '', uc $ARGV[0]; > > vc decide :) > > > > 2013/11/11 Aureliano Guedes <[email protected]> > > Tiago, o máximo que consegui ate agora usando o autobox::Core foi > > #!usr/bin/env perl > use common::sense; > use autobox::Core; > > my @word; > my @key; > @word->push($_->ord) foreach $ARGV[0]->uc->split(''); > @key->push($_->ord) foreach $ARGV[1]->uc->split(''); > for (my $a = 0; $a <= $#key; $a++){ > ((($word[$_] + $key[$_])%26)+65)->chr->print if ($ARGV[2] eq 'e'); > ((($word[$_] - $key[$_])%26)+65)->chr->print if ($ARGV[2] eq 'd');} > > ------------------------------ > From: [email protected] > To: [email protected] > Date: Mon, 11 Nov 2013 17:49:23 +0000 > > Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère > > Achei esse módulo muito interessante mesmo, mas ainda estou conhecendo o > território. Vou tentar aplicar ele. > > ------------------------------ > From: [email protected] > Date: Mon, 11 Nov 2013 15:32:21 -0200 > To: [email protected] > Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère > > só falta vc usar o autobox::Core > > > 2013/11/11 Aureliano Guedes <[email protected]> > > Corrigi, mudando o código todo > http://pastebin.com/dqzZXXzM > > Agora vou tentar em só uma linha. LOL > > ------------------------------ > From: [email protected] > To: [email protected] > 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: [email protected] > Date: Mon, 11 Nov 2013 09:57:14 -0200 > To: [email protected] > 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 <[email protected]> > > 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: [email protected] > Date: Sun, 10 Nov 2013 23:39:42 -0200 > > To: [email protected] > 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 <[email protected]> > > #!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: [email protected] > Date: Sun, 10 Nov 2013 22:42:46 -0200 > > To: [email protected] > Subject: Re: [Rio-pm] [Fun - passa tempo] Cifra de Vigenère > > mostra o codigo > > > 2013/11/10 Aureliano Guedes <[email protected]> > > Certo, mas eu estou preenchendo os atributos, a não ser que eu esteja > preenchendo de forma errada. > > ------------------------------ > From: [email protected] > Date: Sun, 10 Nov 2013 22:22:14 -0200 > > To: [email protected] > 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 <[email protected]> > > 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: [email protected] > Date: Sun, 10 Nov 2013 21:00:04 -0200 > To: [email protected] > > 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 <[email protected]> > > 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: [email protected] > To: [email protected] > 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 [email protected] http://pauleira.com @nprincigalli > Discipline is not an end in itself, just a means to an end. - King Crimson > > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Bruno C. Buss > http://www.brunobuss.net > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > > > > > -- > Tiago B. Peczenyj > Linux User #405772 > > http://about.me/peczenyj > > _______________________________________________ Rio-pm mailing list > [email protected] http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > -- Tiago B. Peczenyj Linux User #405772 http://about.me/peczenyj
_______________________________________________ Rio-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/rio-pm
