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 perluse 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 todohttp://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 25Use 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

Responder a