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

Aureliano Guedes guedes_1000 em hotmail.com
Domingo Novembro 10 18:24:58 PST 2013


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 erroUse 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 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20131111/01b145e6/attachment.html>


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