(totalmente por fora, nunca usei esses modulos/cheguei perto desse tipo de interação)
but.. pelo que entendi, seu primeiro "expect" já captura várias informações, e ai você quer continuar fazendo "expects" com a entrada dela, por exemplo: COMECO [NOME:CRON] [ANO:1992] FIM vc usaria o expect algo como qr/COMECO(.1)FIM/ e ai o modulo se vira pra ler de pouco até chegar o dado 'FIM', quando faz isso, toda a string desde o "COMECO" até "FIM" já está na memoria (nao sei exatamente se é no $1, mas vc já deve saber como usar) e ai assim, isso é apenas string, vc pode até usar o expect passando o $stringref, mas nao sei se é realmente necessário, já que você pode simplesmente usar algo como while ($str =~ /\[(.+)\:(.+)\]/g){ my ($chave,$valor) = ($1, $2); print "$chave = $valor\n"; } 2013/5/2 Frederico Melo <fdmm...@gmail.com> > Eden! Obrigado! Funcionou! Muito obrigado mesmo! > > Sem querer abusar, gostaria de entender melhor como crio os blocos de > processamento dentro do expect. Por exemplo: > > > #$exp->expect(5, [qr/.{1920}/ => sub { > # my($self) = @_; > # print $self->match; > # > # exp_continue; > # }, > # timeout => sub { die 'o sistema parou de responder' } > # ] > # ); > > Entendo que no bloco acima, limitado pelo primeiro "(" e o último ")" > executo o print que corresponde ao retorno da REGEX. OK! É possível, dentro > do mesmo bloco do expect, criar vários blocos limitados por "[" e "]" e > processar várias REGEXs? Como faço isso? Seria algo como feito abaixo? > > > #$exp->expect(5, [qr/.{1920}/ => sub { > # my($self) = @_; > # print $self->match; > # > # exp_continue; > # }, > # timeout => sub { die 'o sistema parou de responder' } > # ], > # > # [qr/DATA\s+.:(.+)/ => sub { > # my($self1) = shift; > # print $self1->match; > # > # exp_continue; > # }, > # timeout => sub { die 'o sistema parou de responder' } > # ] > # ); > > > Fiz isso no código e não há print do $self1, como se o código nem entrasse > no segundo bloco de REGEX. Se coloco o segundo bloco de REGEX no lugar do > primeiro, o print funciona. O que está errado? > > > Procurei na documentação do Expect e vi que existe uma chamada para > CallBacks. Tipo: > > $exp->expect($timeout, > [ qr/regex1/ => sub { my $exp = shift; > $exp->send("response\n"); > exp_continue; } ], > [ "regexp2" , \&callback, @cbparms ], > ); > > > Não soube como utilizar isso. Seria possível ajudar? > > > Obrigado novamente e desculpe a trabalheira. > > > Frederico > > 2013/4/29 Eden Cardim <e...@insoli.de> > >> >> Experimenta trocar as regex mencionadas abaixo pelas sugestões que >> seguem: >> >> Frederico> data: SIGLA.........: XYZ NUMERO DO COD.: 0DD >> Frederico> qr/data:\s+(.+)NUMERO\s+(.+)/ >> >> qr/NUMERO DO COD\.*?:\s*?(\S+)/; >> >> Frederico> data: LOCALIDADE....: XISYPSZE >> Frederico> qr/data:\s+LOCALIDADE(.+)/ >> >> qr/LOCALIDADE\.*?:\s*?(\S+)/; >> >> -- >> Eden Cardim -- Insolide Soluções de TI Ltda. >> +55 11 9644 8225 >> http://insoli.de >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> > > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > > -- Saravá, Renato CRON http://www.renatocron.com/blog/ @renato_cron <http://twitter.com/#!/renato_cron>
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer