簡體   English   中英

使用 given/when IO::Select can_read

[英]Using given/when with IO::Select can_read

我正在制作一個 DIY 睡眠研究過濾器,它將記錄來自音頻 stream(2K 字節/秒)、加速度計(10 個讀數/秒)和控制台終端按鍵輸入的事件。

我把這段代碼放在一起:

$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 }
        }
    }           
}

  1. 所有 given/when 示例都使用字符串值或正則表達式。 這適用於文件句柄嗎?
  2. 我記得較慢的設備應該有更高的優先級,以避免淹沒在來自較快設備的大量數據輸入中。 這應該如何使用 IO::Select add 和 can_read 來處理?

我在 Ubuntu 20.04 桌面上使用 perl 5.30.0。 感謝任何建議。

智能匹配是實驗性的,被認為是失敗的。 應該避免!

while (1) {
   for ($SELECT->can_read ) {
      if    ( $_ == $AREC  ) { }
      elsif ( $_ == $IMU   ) { }
      elsif ( $_ == $STDIN ) { }
   }
}

我喜歡這些事情的調度表,使用預期值作為 hash 鍵和子例程作為 hash 值運行。 一些 Perl 偽代碼:

my $subs = (
    SOME_AREC_VALUE  => sub { ... },
    SOME_IMU_VALUE   => sub { ... },
    SOME_STDIN_VALUE => sub { ... },
    );

$subs->{$_}->();

我在Mastering PerlEffective Perl Programming中寫了很多關於用數據結構替換語法結構的文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM