[SP-pm] Automatizando consulta IBM com Perl ou Expect

Frederico Melo fdmmelo at gmail.com
Thu May 2 13:13:47 PDT 2013


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 <eden at 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 at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20130502/82967e99/attachment.html>


More information about the SaoPaulo-pm mailing list