![](/img/trans.png)
[英]Comparing filehandle with glob returned by 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 }
}
}
}
我在 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 Perl和Effective Perl Programming中寫了很多關於用數據結構替換語法結構的文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.