#!/usr/bin/perl use warnings; use strict; use IO::Handle; use IO::Pipe; use IO::Select; my $stdout = IO::Pipe->new(); my $stdin = IO::Pipe->new(); defined(my $pid = fork) or die "Fork failed\n"; if($pid) { $stdout->reader(); $stdin ->writer(); $stdin ->autoflush(1); my $select = IO::Select->new($stdout); foreach my $key (@ARGV) { $stdin->print("parent ($$) send [$key]\n"); next unless $select->can_read(1); $stdout->sysread(my $buf, 1024); chomp($buf); print "parent ($$) recv [$buf]\n"; } $stdin->close(); waitpid($pid, 0); } else { $stdout->writer(); $stdin ->reader(); $stdout->autoflush(1); open STDOUT, ">&", $stdout; open STDIN, "<&", $stdin; exec "$^X", "tst.pl"; } #### #!/usr/bin/perl use warnings; use strict; $|++; while() { chomp; next unless /\[(\d+)\]/ && $1 % 2 == 1; # Only odds print "$1 is odd\n"; }