[SP-pm] Perl para automação em acesso a x3270 IBM
Nelson Ferraz
nferraz at gmail.com
Tue Jul 10 01:16:03 PDT 2012
Em 10 de julho de 2012 03:16, Marcio - Google <marciorp em gmail.com> escreveu:
> Olá Nelson, obrigado!
>
> Sobre a sugestão 1, vou usar a partir de agora. O eles fazem?
use strict, entre outras coisas, torna a declaração de variáveis
obrigatória. Isso ajuda a evitar muitos tipos de erros.
use warnings mostra alertas úteis.
> Em relação ao pump, eu tentei usar, mais não sei o que esperar de
> retorno. Pode ser qualquer coisa ou simplesmente nada.
Se você não sabe o que esperar, pode usar um timer. Se você sabe, aí
pode usar uma expressão regular.
> 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.
Foi isso o que eu entendi também.
Você tentou verificar o resultado em $out depois de executar o pump?
Verifique também como usar um timer, pois as vezes existe um pequeno
delay entre o envio e a resposta.
Finalmente... talvez seja bom colocar os seus comandos em um array e
enviá-los para uma sub:
my @commands = (
"command1",
"command2",
"command3",
);
my $res = run_these(@commands);
sub run_these {
my @cmd = @_;
# prepare
# ...
for my $cmd (@cmd) {
# run
# ...
}
# return
return $out;
}
Com isso você não precisará ficar concatenando strings, e poderá
executar os comandos assim:
my $res = run_these(
'command1',
'command2',
'command3',
);
# do something with $res1
my $res = run_these(
'command4',
'command5',
'command6',
);
# do something with $res2
# so on...
More information about the SaoPaulo-pm
mailing list