The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
no strict qw(refs);

use Carp;
local $SIG{'__WARN__'} = \&Carp::cluck;

use IO::Poll qw(POLLIN);
use Fcntl;
use constant FSEL_FILES => 16;

my @fds;

foreach my $i (0 .. (FSEL_FILES - 1)) {
    sysopen($fds[$i], $ARGV[0] . '/' . sprintf('%X', $i), O_RDONLY)
        or croak($!);
}

my $poll = new IO::Poll;
foreach my $fd (@fds) {
    $poll->mask($fd, POLLIN);
}
while (1) {
    my $rc = $poll->poll();

    croak($!) if $rc < 0;

    foreach my $i (0 .. (FSEL_FILES - 1)) {
        if (!$poll->events($fds[$i])) {
            print '_:   ';
            next;
        }
        printf('%X:', $i);
        $rc = sysread($fds[$i], my $buf, 4096);
        croak($!) if !defined($rc);

        printf('%02d ', $rc);
    }
    print "\n";
}