#!/bin/env perl use IPC::Open2; # for two-way communication via pipe my @ports = qw /2222 3333/; my $isRunning = 1; my $connections = (); # hashref of port connections # store file handles and pid for each opened port in @ports foreach $port ( @ports ) { local ( *Reader, *Writer ); my $pid = open2(\*Reader, \*Writer, "nc -l -p $port\n") && print "Opened local port for IO: $port\n"; $connection->{$port}->{"pid"} = $pid; $connection->{$port}->{"Reader"} = *Reader; $connection->{$port}->{"Writer"} = *Writer; } # Listen to each port and reply to whatever comes in while ($isRunning){ foreach $port ( @ports ) { my $Reader = $connection->{$port}->{"Reader"}; my $Writer = $connection->{$port}->{"Writer"}; if ( $_ = <$Reader> ) { print $Writer &readAndFormResponse($port , $_); } } } # Dummy handler sub readAndFormResponse { my $port = shift; my $data = shift; return "Reply to port: $port\n"; }