use strict; use warnings; package Sender; use Fcntl; sub run {   my ($class, $pipe) = @_;   print STDOUT "Sender $$ wurde gestartet\n";   while ( 1 ) {      sysopen my $fh, $pipe ,O_WRONLY or die $!;      print $fh "Hello World from $$\n";      close $fh;      sleep 10;   } } package Empfaenger; use Fcntl; use IO::Select; sub run {   my ($class, $pipes) = @_;   my $io = IO::Select->new;   my %handles;   for my $p (@$pipes) {      sysopen my $fh, $p, O_RDONLY or die $!;      $handles{$fh} = $p;      $io->add($fh);   }   print STDOUT "Empfaenger wurde gestartet\n";   while ( 1 ) {      my @ready = $io->can_read(2);      for my $fh (@ready) {         print STDOUT "Receiving data from pipe $handles{$fh}\n";         print while <$fh>;      }      sleep 10;   } } package main; use POSIX qw/mkfifo/; my @pipes; for my $pipe (1..5) {   mkfifo($pipe, 0600) or die $!;   my $pid = fork;   if ($pid) { # Empfaenger      push @pipes, $pipe;   } else { # Sender      Sender->run($pipe);      exit;   } } Empfaenger->run(\@pipes);