http://qs321.pair.com?node_id=42388

wombat has asked for the wisdom of the Perl Monks concerning the following question:

I am embarking on a great undertaking. I'll refrain from talking about it here because it's not really important to the question. I ask this question because I'm being befuddled on the first step.

My program telnets into a MUSH, using open MUX_OUTPUT, "|telnet host.server.net 8080 > logfile" It telnets in correctly, the logfile gets the expected output that the MUSH sends back, however, I cannot print commands to the MUSH. I have unbuffered my output with $|=1. I have tried sending commands ending in \n \r \f and many combinations thereof. I got it to work in C using popen(), \n, and manually flushing the buffer after each write, but this doesn't seem to work at all in the holy language of PERL. Any ideas what I'm doing wrong?

~W

Replies are listed 'Best First'.
Re: Sending commands to a Telnet Server
by Fastolfe (Vicar) on Nov 19, 2000 at 07:13 UTC
    Are you unbuffering the right file handle? $|=1 affects the currently-selected filehandle. Be sure you're doing this:
    select(MUX_OUTPUT); $|=1; select(STDOUT); print MUX_OUTPUT "this is unbuffered\n";
    Though you will avert this headache by following merlyn's advice and giving Net::Telnet a try. If you prefer more control, use IO::Socket and/or Expect and set up the connection to the MUSH yourself:
    my $mush = new IO::SOCKET::INET ("mush.example.com:8080") or die "Couldn't connect to MUSH: $@"; print $mush "command\n"; my $response = <$mush>;
Re: Sending commands to a Telnet Server
by merlyn (Sage) on Nov 19, 2000 at 06:05 UTC