[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