<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Boa noite,<br><br>Tenho uma duvida, alias duas.<br><br>Primeiro, sei que $_ é uma variavel especial, sei pra que serve, mas quando temos $_[0], $_[1] etc... isso é o mesmo que manipulação direta de array??<br><br>Outra duvida é quando temos @{alguma coisa}, por exemplo @{$_}... o que esse array com chaves quer dizer, digo, o que ele faz?? independente do codigo.<br><br>Obrigado a todos pela ajuda maravilhosa quem a comunidade Perl oferece. Meu problema, creio, que não é Perl em si, e sim as bases teoricas<br>da programação.<br><br><div><div id="SkyDrivePlaceholder"></div>> From: blabos@gmail.com<br>> Date: Sat, 31 Mar 2012 13:06:26 -0300<br>> To: rio-pm@pm.org<br>> Subject: Re: [Rio-pm] Mudando de formato<br>> <br>> > my ($scalar) = (1,2);<br>> <br>> que é diferente de<br>> <br>> > my $scalar = (1,2);<br>> <br>> 2012/3/31 Marcio Ferreira <marciodesouzaferreira@gmail.com>:<br>> > também recomendo o modern perl, se ler terá sua dúvida sanada.<br>> ><br>> > A dica é, entenda listas em perl.<br>> ><br>> > my ($scalar) = (1,2);<br>> ><br>> > On Mar 31, 2012 12:51 PM, "Aureliano Guedes" <guedes_1000@hotmail.com><br>> > wrote:<br>> >><br>> >> Eu sei que o split que separou tudo, mas "my ( $first, $second ) = (<br>> >> $piece =~ /\d{2}/g );" é que joga automaticamente o primeiro digito para um<br>> >> e o segundo para outro...<br>> >> achei isso imprecionante.<br>> >><br>> >> Bem join e split eu conheço bem, ja os usei a uns 4 meses atras, logo<br>> >> depois de ter começado a "Perlgramar" ^^.<br>> >><br>> >> mas esse map, ja li na perldoc aqui -><br>> >> http://perldoc.perl.org/functions/map.html e apesar de bem explicado não<br>> >> entrou na minha cabeça.<br>> >><br>> >> bem mas to tentando fazer o programa aqui de outra forma, ja entendi<br>> >> algumas coisas vendo o seu, mas o seu gera umas coisas desnecessaria no<br>> >> output.<br>> >><br>> >> Bem, vou tentando, qualquer coisa eu posto aqui esperando ajuda...<br>> >><br>> >> > From: tiago.peczenyj@gmail.com<br>> >> > Date: Sat, 31 Mar 2012 10:21:23 -0300<br>> >> > To: rio-pm@pm.org<br>> >> > Subject: Re: [Rio-pm] Mudando de formato<br>> >> ><br>> >> > Outra dica é exercitar<br>> >> ><br>> >> > se vc não entendeu parte do codigo abra um editor de texto, coloque o<br>> >> > trecho e de valores as variaveis, vendo o que acontece no final<br>> >> > rodando o programa. enche de print num primeiro momento, depois vc<br>> >> > refina conforme vai aprendendo.<br>> >> ><br>> >> > On Sat, Mar 31, 2012 at 10:13 AM, Blabos de Blebe <blabos@gmail.com><br>> >> > wrote:<br>> >> > >> Desculpa, floodar, mas aqui nesse trecho<br>> >> > >> ...<br>> >> > >> como ele pega de cada linha os valores como esse<br>> >> > >> 0303 0303 0101 1011 0304<br>> >> > ><br>> >> > > Errado.<br>> >> > ><br>> >> > > Quem separa a linha em 'peças' é a linha:<br>> >> > ><br>> >> > > my @pieces = split /\s+/, $line;<br>> >> > ><br>> >> > > ...que perldoc -f split, quebra a linha nos 'espaços':<br>> >> > ><br>> >> > > @pieces = ( '001,', '0303', '0303', '0101', '1011', '0304' );<br>> >> > ><br>> >> > ><br>> >> > >> 0303 0303 0101 1011 0304<br>> >> > >><br>> >> > >> e seleciona que a cada 2 digitos primeiro é do $first e o segundo do<br>> >> > >> $second.<br>> >> > >><br>> >> > >> sei que esta exatamente nessa linha<br>> >> > >><br>> >> > >><br>> >> > >> my ( $first, $second ) = ( $piece =~ /\d{2}/g );<br>> >> > >><br>> >> > >> a resposta, mas nunca teria pensado que isso era de certa forma<br>> >> > >> automatico.<br>> >> > ><br>> >> > > Não existe mágica, existe perldoc perlre.<br>> >> > ><br>> >> > > Procure por contexto. Na verdade foi a primeira vez que eu usei isso<br>> >> > > na vida real.<br>> >> > ><br>> >> > ><br>> >> > >> você me explicaria o que quer dizer essa linha:<br>> >> > >><br>> >> > >> say join( ' ', map { 0 + $_ } @first );<br>> >> > ><br>> >> > > perldoc -f map<br>> >> > > perldoc -f join<br>> >> > ><br>> >> > > No modern perl ele fala sobre 'casting';<br>> >> > ><br>> >> > > ...<br>> >> > ><br>> >> > > Você deve notar que eu não estou respondendo diretamente. É porque as<br>> >> > > respostas são bizarramente óbvias pra quem *leu a documentação*.<br>> >> > ><br>> >> > > Fica a dica visite as docs dos itens:<br>> >> > ><br>> >> > > perlio, perlre,<br>> >> > > perldoc -f split<br>> >> > > perldoc -f map<br>> >> > > perldoc -f join<br>> >> > ><br>> >> > ><br>> >> > >> Eu to aqui tentando entender seu codigo, e fazer o meu proprio,<br>> >> > ><br>> >> > > Suas perguntas são típicas de quem está completamente perdido. Nesse<br>> >> > > ponto, não tente entender o código, você até pode conseguir, mas vai<br>> >> > > levar muito mais tempo do que se parar pra aprender o básico da<br>> >> > > linguagem.<br>> >> > ><br>> >> > ><br>> >> > > Leia a documentação, leia o modern perl. Depois volte e pergunte.<br>> >> > ><br>> >> > > Bônus (eu to muito bonzinho :) ):<br>> >> > ><br>> >> > > https://metacpan.org/module/POD2::PT_BR<br>> >> > ><br>> >> > ><br>> >> > > []'s<br>> >> > ><br>> >> > ><br>> >> > > 2012/3/31 Aureliano Guedes <guedes_1000@hotmail.com>:<br>> >> > >> Desculpa, floodar, mas aqui nesse trecho<br>> >> > >><br>> >> > >><br>> >> > >>  my ( @first, @second );<br>> >> > >>     foreach my $piece ( @pieces ) {<br>> >> > >>         my ( $first, $second ) = ( $piece =~ /\d{2}/g );<br>> >> > >><br>> >> > >>         push @first, $first;<br>> >> > >>         push @second, $second;<br>> >> > >>     }<br>> >> > >><br>> >> > >> se eu tenho esse arquivo<br>> >> > >><br>> >> > >><br>> >> > >> Pop<br>> >> > >> 001,    0303 0303 0101 1011 0304<br>> >> > >> 002,    0303 0003 0101 0410 0405<br>> >> > >> 003,    0303 0305 0101 1013 0304<br>> >> > >> 004,    0103 0304 0102 0207 0104<br>> >> > >> Gra,    0203 0304 0202 0207 0105<br>> >> > >><br>> >> > >> como ele pega de cada linha os valores como esse<br>> >> > >><br>> >> > >><br>> >> > >> 0303 0303 0101 1011 0304<br>> >> > >><br>> >> > >> e seleciona que a cada 2 digitos primeiro é do $first e o segundo do<br>> >> > >> $second.<br>> >> > >><br>> >> > >> sei que esta exatamente nessa linha<br>> >> > >><br>> >> > >><br>> >> > >> my ( $first, $second ) = ( $piece =~ /\d{2}/g );<br>> >> > >><br>> >> > >> a resposta, mas nunca teria pensado que isso era de certa forma<br>> >> > >> automatico.<br>> >> > >><br>> >> > >> ________________________________<br>> >> > >> From: guedes_1000@hotmail.com<br>> >> > >> To: rio-pm@pm.org<br>> >> > >> Date: Sat, 31 Mar 2012 11:34:43 +0000<br>> >> > >><br>> >> > >> Subject: Re: [Rio-pm] Mudando de formato<br>> >> > >><br>> >> > >> Valeu mesmo, monges.<br>> >> > >> Blabos, obrigado mesmo, mas na verdade a parte que eu pedi era so a<br>> >> > >> mais<br>> >> > >> dificil, mas<br>> >> > >> por que aind atem o topo dos arquivos.<br>> >> > >><br>> >> > >> Eu to aqui tentando entender seu codigo, e fazer o meu proprio,<br>> >> > >> você me explicaria o que quer dizer essa linha:<br>> >> > >><br>> >> > >> say join( ' ', map { 0 + $_ } @first );<br>> >> > >><br>> >> > >>> From: blabos@gmail.com<br>> >> > >>> Date: Fri, 30 Mar 2012 14:18:45 -0300<br>> >> > >>> To: rio-pm@pm.org<br>> >> > >>> Subject: Re: [Rio-pm] Mudando de formato<br>> >> > >>><br>> >> > >>> Hum,<br>> >> > >>><br>> >> > >>> O segundo link foi colado errado. O certo seria:<br>> >> > >>><br>> >> > >>> http://norvig.com/21-days.html<br>> >> > >>><br>> >> > >>> 2012/3/30 Nuba Princigalli <nuba@fastmail.fm>:<br>> >> > >>> > Olá Aureliano,<br>> >> > >>> ><br>> >> > >>> > Você também pode levar seu problema quando fizermos o próximo<br>> >> > >>> > hackathon<br>> >> > >>> > +<br>> >> > >>> > code clinic! Agora, tanto num code clinic quanto aqui na lista, a<br>> >> > >>> > expectativa é que você pelo menos tente quebrar o problema antes,<br>> >> > >>> > e peça<br>> >> > >>> > ajuda no que tiveHumr dificuldade.<br>> >> > >>> ><br>> >> > >>> > Esse processo de sair duma descrição em linguagem natural de um<br>> >> > >>> > problema<br>> >> > >>> > e<br>> >> > >>> > chegar numa implementação em linguagem de programação, tomando<br>> >> > >>> > decisões<br>> >> > >>> > de<br>> >> > >>> > ferramentas, paradigmas, etc. no caminho, nem sempre é trivial, e<br>> >> > >>> > obviamente<br>> >> > >>> > esse "trivial" depende também da sua bagagem. Se está difícil dar<br>> >> > >>> > o<br>> >> > >>> > passo<br>> >> > >>> > largo de uma vez só, tente dar um passo intermediário, por<br>> >> > >>> > exemplo,<br>> >> > >>> > escrevendo em pseudo-código, fazendo diagramas, ou qualquer outra<br>> >> > >>> > técnica<br>> >> > >>> > que te ajude a organizar o pensamento.<br>> >> > >>> ><br>> >> > >>> > Acho os links que o Blabos te indicou bons pontos de<br>> >> > >>> > partida. Também<br>> >> > >>> > sugiro<br>> >> > >>> > ler e dissecar pacientemente a solução que o Blabos te enviou, até<br>> >> > >>> > você<br>> >> > >>> > entender o que está acontecendo ali. Perldoc perlfunc são seus<br>> >> > >>> > amigos, e<br>> >> > >>> > pode perguntar aqui também.<br>> >> > >>> ><br>> >> > >>> > Sucesso na jornada! Precisando de ajuda, estamos aqui! :)<br>> >> > >>> ><br>> >> > >>> > Nuba Princigalli<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > On Fri, Mar 30, 2012, at 12:43 PM, Blabos de Blebe wrote:<br>> >> > >>> ><br>> >> > >>> > Aureliano, querido amigão, o tio Blabos está de bom humor hoje e<br>> >> > >>> > vai te<br>> >> > >>> > ajudar.<br>> >> > >>> ><br>> >> > >>> > Pelo que eu sei que você não é da área de informática, e não foi<br>> >> > >>> > treinado<br>> >> > >>> > para resolver o que você está tentando resolver, ponto pra você.<br>> >> > >>> ><br>> >> > >>> > Mas pelo que eu sinto, você também não está fazendo o dever de<br>> >> > >>> > casa. É<br>> >> > >>> > comum<br>> >> > >>> > que pessoas de outras áreas, ao se deparar com programação, saiam<br>> >> > >>> > desesperadamente 'caçando' tutoriais sobre 'como programar da<br>> >> > >>> > noite pro<br>> >> > >>> > dia'. Esquece, isso não vai acontecer.<br>> >> > >>> ><br>> >> > >>> > A sua dúvida não é um problema de linguagem, mas sim de como dar<br>> >> > >>> > os<br>> >> > >>> > passos<br>> >> > >>> > necessários para resolver o problema. Isso leva mais tempo pra<br>> >> > >>> > aprender,<br>> >> > >>> > do<br>> >> > >>> > que descobrir os comandos necessários.<br>> >> > >>> ><br>> >> > >>> > Sugiro fortemente que vc leia<br>> >> > >>> ><br>> >> > >>> > http://www.modernperlbooks.com/mt/index.html<br>> >> > >>> ><br>> >> > >>> > http://www.modernperlbooks.com/mt/index.html<br>> >> > >>> ><br>> >> > >>> > http://www.catb.org/~esr/faqs/smart-questions.html<br>> >> > >>> ><br>> >> > >>> > ...antes de continuar com qualquer código.<br>> >> > >>> ><br>> >> > >>> > Nós estaremos aqui pra te apoiar e te ajudar, mas vc ainda não<br>> >> > >>> > sabe nem<br>> >> > >>> > quais são as perguntas. Não adianta a gente dar as respostas.<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > Segue abaixo um naco de código que ilustra mais ou menos como<br>> >> > >>> > resolver<br>> >> > >>> > esse<br>> >> > >>> > problema (deve ter uns erros no meio), de uma forma mais ou menos<br>> >> > >>> > didática<br>> >> > >>> > (foco nos passos).<br>> >> > >>> ><br>> >> > >>> > Provavelmente os outros monges resolvem isso em menos de 50<br>> >> > >>> > caracteres.<br>> >> > >>> > Golf? :)<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > Não se assuste. Não desista. Mas comece a construir a sua casa<br>> >> > >>> > pelo<br>> >> > >>> > alicerce.<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > []'s<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > <code><br>> >> > >>> > open my $fh, '<', 'filename' or die 'cannot open file';<br>> >> > >>> ><br>> >> > >>> > while ( my $line = <$fh> ) {<br>> >> > >>> >     chomp $line;<br>> >> > >>> >     my @pieces = split /\s+/, $line;<br>> >> > >>> ><br>> >> > >>> >     say '#' . ( 0 + $pieces[0] );<br>> >> > >>> ><br>> >> > >>> >     my ( @first, @second );<br>> >> > >>> >     foreach my $piece ( @pieces ) {<br>> >> > >>> >         my ( $first, $second ) = ( $piece =~ /\d{2}/g );<br>> >> > >>> ><br>> >> > >>> >         push @first, $first;<br>> >> > >>> >         push @second, $second;<br>> >> > >>> >     }<br>> >> > >>> ><br>> >> > >>> >     say join( ' ', map { 0 + $_ } @first );<br>> >> > >>> >     say join( ' ', map { 0 + $_ } @second );<br>> >> > >>> > }<br>> >> > >>> > </code><br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > On Friday, March 30, 2012, Aureliano Guedes wrote:<br>> >> > >>> ><br>> >> > >>> > Bom dia,<br>> >> > >>> > Monges.<br>> >> > >>> ><br>> >> > >>> > Sem enrolar muito vou ser direto na minha duvida.<br>> >> > >>> ><br>> >> > >>> > Tenho dois formatos de arquivo, no qual devo converter do primeiro<br>> >> > >>> > formato<br>> >> > >>> > para o segundo,<br>> >> > >>> > e no BioPerl não encontro nada que me ajude.<br>> >> > >>> ><br>> >> > >>> > O primeiro formato, ou melhor, o formato de entrada segue o padrão<br>> >> > >>> > abaixo:<br>> >> > >>> ><br>> >> > >>> > ################################<br>> >> > >>> > Pop #Aqui indica inicio dos dados<br>> >> > >>> > 001, xywz abcd ...<br>> >> > >>> > ... #o padrão se repete ate o final<br>> >> > >>> > Gra, qwer jkld ... #o ultimo individuo se chama "Gra" sempre<br>> >> > >>> > #essas letras são numeros e no exemplo ficara mais claro<br>> >> > >>> > ################################<br>> >> > >>> ><br>> >> > >>> > O segundo formato, e no caso formato de saida segue o padrão<br>> >> > >>> > abaixo:<br>> >> > >>> ><br>> >> > >>> > ###############################<br>> >> > >>> > #1<br>> >> > >>> > x w a c<br>> >> > >>> > y z b d<br>> >> > >>> > ...<br>> >> > >>> > #x #x é o ultimo numero, que como não sabemos qual é deixei assim<br>> >> > >>> > q e j l<br>> >> > >>> > w r k d<br>> >> > >>> > ##############################<br>> >> > >>> ><br>> >> > >>> > Agora facilitarei tudo com um exemplo<br>> >> > >>> ><br>> >> > >>> > Formato de entrada, exemplo:<br>> >> > >>> ><br>> >> > >>> > #############################<br>> >> > >>> > Pop<br>> >> > >>> > 001,    0303 0303 0101 1011 0304<br>> >> > >>> > 002,    0303 0003 0101 0410 0405<br>> >> > >>> > 003,    0303 0305 0101 1013 0304<br>> >> > >>> > 004,    0103 0304 0102 0207 0104<br>> >> > >>> > Gra,    0203 0304 0202 0207 0105<br>> >> > >>> > #############################<br>> >> > >>> ><br>> >> > >>> > Formato de saida, exemplo:<br>> >> > >>> ><br>> >> > >>> > #############################<br>> >> > >>> > #1<br>> >> > >>> > 3 3 1 10 3<br>> >> > >>> > 3 3 1 11 4<br>> >> > >>> > #2<br>> >> > >>> > 3 0 1 4 4<br>> >> > >>> > 3 3 1 10 5<br>> >> > >>> > #3<br>> >> > >>> > 3 3 1 10 3<br>> >> > >>> > 3 5 1 13 4<br>> >> > >>> > #4<br>> >> > >>> > 1 3 1 2 1<br>> >> > >>> > 3 4 2 7 4<br>> >> > >>> > #5<br>> >> > >>> > 2 3 2 2 1<br>> >> > >>> > 3 4 2 7 5<br>> >> > >>> > ##############################<br>> >> > >>> ><br>> >> > >>> > Observem duas coisas:<br>> >> > >>> ><br>> >> > >>> > - No primeiro formato os valores estão lado a lado, e de uma<br>> >> > >>> > coordenada<br>> >> > >>> > para<br>> >> > >>> > outra<br>> >> > >>> > temos um espaço, as unidades sempre são 2 numeros. No segundo<br>> >> > >>> > formato os<br>> >> > >>> > valores estão um em baixo do outro, logo se<br>> >> > >>> > temo no primeiro formato<br>> >> > >>> > #############################<br>> >> > >>> > 001,    1213 2720<br>> >> > >>> > #############################<br>> >> > >>> > vai sair<br>> >> > >>> > #############################<br>> >> > >>> > #1<br>> >> > >>> > 12 27<br>> >> > >>> > 13 20<br>> >> > >>> > #############################<br>> >> > >>> ><br>> >> > >>> > - Caso tenha um 0 na frente, o formato de saida elimina ele<br>> >> > >>> > #############################<br>> >> > >>> > 001,     0103 0202<br>> >> > >>> > [/PHP]<br>> >> > >>> > #############################<br>> >> > >>> > #1<br>> >> > >>> > 1 2<br>> >> > >>> > 3 2<br>> >> > >>> > #############################<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > Bem gente, toda ajuda possivel será muito bem vinda.<br>> >> > >>> ><br>> >> > >>> > Desde já, grato.<br>> >> > >>> ><br>> >> > >>> > Att,<br>> >> > >>> > Aureliano Guedes<br>> >> > >>> ><br>> >> > >>> > _______________________________________________<br>> >> > >>> > Rio-pm mailing list<br>> >> > >>> > Rio-pm@pm.org<br>> >> > >>> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> > >>> ><br>> >> > >>> ><br>> >> > >>> > --<br>> >> > >>> > Nuba R. Princigalli nuba@pauleira.com http://pauleira.com<br>> >> > >>> > @nprincigalli<br>> >> > >>> > Discipline is not an end in itself, just a means to an end. - King<br>> >> > >>> > Crimson<br>> >> > >>> ><br>> >> > >>> > _______________________________________________<br>> >> > >>> > Rio-pm mailing list<br>> >> > >>> > Rio-pm@pm.org<br>> >> > >>> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> > >>> _______________________________________________<br>> >> > >>> Rio-pm mailing list<br>> >> > >>> Rio-pm@pm.org<br>> >> > >>> http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> > >><br>> >> > >> _______________________________________________ Rio-pm mailing list<br>> >> > >> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> > >><br>> >> > >> _______________________________________________<br>> >> > >> Rio-pm mailing list<br>> >> > >> Rio-pm@pm.org<br>> >> > >> http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> > > _______________________________________________<br>> >> > > Rio-pm mailing list<br>> >> > > Rio-pm@pm.org<br>> >> > > http://mail.pm.org/mailman/listinfo/rio-pm<br>> >> ><br>> >> ><br>> >> ><br>> >> > --<br>> >> > Tiago B. Peczenyj<br>> >> > Linux User #405772<br>> >> ><br>> >> > http://pacman.blog.br<br>> >> > _______________________________________________<br>> >> > Rio-pm mailing list<br>> >> > Rio-pm@pm.org<br>> >> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> >><br>> >> _______________________________________________<br>> >> Rio-pm mailing list<br>> >> Rio-pm@pm.org<br>> >> http://mail.pm.org/mailman/listinfo/rio-pm<br>> ><br>> ><br>> > _______________________________________________<br>> > Rio-pm mailing list<br>> > Rio-pm@pm.org<br>> > http://mail.pm.org/mailman/listinfo/rio-pm<br>> _______________________________________________<br>> Rio-pm mailing list<br>> Rio-pm@pm.org<br>> http://mail.pm.org/mailman/listinfo/rio-pm<br></div>                                        </div></body>
</html>