Olá Nelson, obrigado! Sobre a sugestão 1, vou usar a partir de agora. O eles fazem?
Em relação ao pump, eu tentei usar, mais não sei o que esperar de retorno. Pode ser qualquer coisa ou simplesmente nada. Não consegui adaptar esse código (pump $h until $out =~ /second input/;) a essa situação. Assim funcionaria, desde que eu consiga pegar todo o retorno, independente de qual seja. Depois penso realmente em usar expressão regular para procurar as informações no meio do retorno. O código adaptado ficou assim: my $h = start \@s3270, \$in, \$out, \$err, timeout( 100 ); ... $in .= "Ascii(0,0,24,80)\n"; pump $h while length $in; #Até aqui tudo certo. Pelo que entendi ele fica no loop até enviar toda a entrada. pump $h until $out ?????; #Aqui não funciona, pois não sei o que esperar. print $out; $in = "disconnect\n"; $in .= "quit\n"; finish $h or die "s3270 returned $?"; warn $err if $err; print $out; Abs, Marcio. Em 9 de julho de 2012 14:24, Nelson Ferraz <[email protected]> escreveu: > Bem vindo `a lista de discussao, Marcio! > > Obrigado por ter contextualizado o problema e enviado o codigo -- isso > facilita muito a vida de quem quer ajudar! :) > > E parabens por ter ido tao longe! > > Entao... mesmo sem ter acesso ao seu ambiente, aqui vao algumas sugestoes: > > 1) SEMPRE comece os seus programas com: > > use strict; > use warnings; > > Isso vai te poupar muita dor de cabeca a longo prazo! > > 2) Acho que o que voce precisa e' do comando pump, como mostra o exemplo: > > ## Build the harness, open all pipes, and launch the subprocesses > my $h = start \@cat, \$in, \$out; > $in = "first input\n"; > > ## Now do I/O. start() does no I/O. > pump $h while length $in; ## Wait for all input to go > > ## Now do some more I/O. > $in = "second input\n"; > pump $h until $out =~ /second input/; > > ## Clean up > finish $h or die "cat returned $?"; > > 3) Voce tambem pode usar uma expressao regular para esperar por uma > determinada string: > > $h = harness \@smbclient, \$in, \$out; > > $in = "cd /src\n"; > $h->pump until $out =~ /^smb.*> \Z/m; > die "error cding to /src:\n$out" if $out =~ "ERR"; > $out = ''; > > $in = "mget *\n"; > $h->pump until $out =~ /^smb.*> \Z/m; > die "error retrieving files:\n$out" if $out =~ "ERR"; > > $in = "quit\n"; > $h->finish; > > Espero que isso ajude... caso contrario, continue mandando suas duvidas! > =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 =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
