bc en una máquina remota.
El control de bc desde nuestro programa se ve dificultado
porque no existe una relación 
una línea de pregunta-una linea de respuesta 
entre nuestra aplicación y bc. Por ejemplo, si 
el cliente escribe 4*8\n la calculadora responde con una nueva 
línea conteniendo 32\n. Sin embargo, si escribimos
a = 4\n la calculadora bc toma nota del
nuevo valor de a pero no muestra su contenido
en pantalla. 
lhp@nereida:~/Lperl/src/perl_networking/ch2$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 4*2 <-- usuario 8 a = 4 <-- usuario a <-- usuario 4 ^D <-- usuarioLa solución heurística que seguimos en el siguiente programa es establecer un límite de tiempo de dos segundos de espera por la respuesta. Para ello usamos la estrategia introducida en la sección 3.4.9. Si no hay respuesta de
bc
se pasa al siguiente turno del programa.
lhp@nereida:~/Lperl/src/perl_networking/ch2$ cat -n open2bc.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3  use IPC::Open2;
     4  use IO::Handle;
     5
     6  my $WTR = IO::Handle->new();
     7  my $RDR = IO::Handle->new();
     8
     9  my $line;
    10  $SIG{ALRM} = sub { $line = undef; die };
    11
    12  # Execute bc in trusted remote machine
    13  my $pid = open2($RDR, $WTR, 'ssh europa bc');
    14
    15  while (<STDIN>) {         # read command from user
    16    print $WTR $_;          # write a command to europa bc
    17    alarm(2); # bc sometimes does not answer
    18    eval {
    19      $line = <$RDR>;
    20    };
    21    alarm(0);
    22    print STDOUT $line if defined($line);
    23  }
    24  print $WTR "quit\n";
    25  wait;
Sigue un ejemplo de ejecución:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ open2bc.pl 4*32*2 <--- escrito por el usuario 256 <=== respuesta de bc europa a=5^2 <--- escrito por el usuario a <--- escrito por el usuario 25 <=== respuesta de bc europa quit <--- escrito por el usuario
Casiano Rodríguez León
