Estoy inventando un filtro de estudio del sueño de bricolaje que registrará eventos de la entrada de una transmisión de audio (2K bytes/seg), un acelerómetro (10 lecturas/seg) y pulsaciones de teclas de la terminal de la consola.
He reunido este trozo de código:
$SELECT=IO::Select->new or die "muffed create SELECT: $!\n" ; my $i ; foreach ($AREC,$IMU,$STDIN) { $i++ ; $SELECT->add($_) or die "muffed SELECT $i: $!\n" ; } while (TRUE) { foreach ($SELECT->can_read ) { given ($_) { when ($AREC) {}# handle audio from pipe when ($IMU) {}# handle acceleromter from UDP socket} when ($STDIN) {}# handle keystrokes } } } }Estoy usando perl 5.30.0 en un escritorio Ubuntu 20.04. Agradezco cualquier consejo.
La coincidencia inteligente es experimental y se considera un fracaso. ¡Debe evitarse!
while (1) { for ($SELECT->can_read ) { if ( $_ == $AREC ) { } elsif ( $_ == $IMU ) { } elsif ( $_ == $STDIN ) { } } }Me gustan las tablas de despacho para este tipo de cosas, usando los valores esperados como claves hash y la subrutina para ejecutarse como valores hash. Algo de pseudocódigo de Perl:
my $subs = ( SOME_AREC_VALUE => sub { ... }, SOME_IMU_VALUE => sub { ... }, SOME_STDIN_VALUE => sub { ... }, ); $subs->{$_}->();Escribo bastante sobre la sustitución de la estructura sintáctica por la estructura de datos en Mastering Perl y en la Programación eficaz en Perl .