Monges! Socorro!
Sou bem limitado na programação em perl mas estou evoluindo com o tempo.
Então desculpem pelas minhas dúvidas que para vocês, pode ser muito
simples...

Bom, estou utilizando expect com perl e analiso alguns outputs de um
servidor, em forma texto, que devo analisar e, dependendo da ocorrência de
uma string, devo disparar uma determinada sub-rotina para tratativas
específicas.

Ex.: se aparecer a string CONSULTA, devo disparar a subrotina consulta()
Se aparecer a string OBJETIVO, devo disparar a subrotina obj() e assim por
diante.

O output do servidor é verificado pelo expect e, no momento que devo tomar
a decisão, a tela do output é apenas uma, com apenas uma das ocorrências
abaixo.

Para verificar isso, estruturei o código .pl assim:

$exp->expect(2,

              [ qr/SELECIONE/ => \&select()],

              [ qr/OBJETIVO/ => \&obj()],

              [ qr/AGUARDE/ => \&sai_6()],

              [ qr/CONSULTA/ => \&consulta()],

              [ timeout => \&cancela() ],

              );
Ou seja, no meu entendimento limitado, quero que o expect dispare uma das
subs acima dependendo da string que ele encontrar no output do servidor.

Acredito que a estrutura acima, que parece uma matriz (desculpem a
ignorância), vai executar TODAS as subs independente do conteúdo do output
do servidor.

O que está acontecendo é que o expect ou o perl só dispara a primeira
sub... select()... independente da string encontrada...

Sei que a condição para encontrar as strings funcionam pois, fiz um perl
com expect para cada condição acima e, quando rodo individualmente cada
.pl, funciona certo... o que estou errando? Como devo fazer o que preciso?

Por favor, ajudem!

Muito obrigado,
Atte.,
Frederico
=begin disclaimer
   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
 SaoPaulo-pm mailing list: [email protected]
 L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
=end disclaimer

Responder a