use IPC::Open3 qw( open3 ); while (my $client = $socket->accept()) { while (<$client>) { chomp; my ($cmd, @args) = split(/:/, $_); my @cmd; if ($cmd eq 'ls') { @cmd = ( 'ls', '-s', '--', @args ); } if (@cmd) { open(local *C_STDIN, '<', '/dev/null') or die; open(local *C_STDOUT, '>&, $client) or die; my $pid = open3('C_STDOUT', '>C_STDOUT', @cmd); waitpid($pid, 0); } } }