raymond@math.berkeley.edu (Raymond Chen) (12/19/89)
This arose when moving a script from perl2.0 to perl3.0. % perl2 -e 'print (0?1:2),"foo\n";' <- 2.0.1.8 Patchlevel 15 2foo % perl -e 'print (0?1:2),"foo\n";' 2% perl -v $Header: perly.c,v 3.0.1.2 89/11/17 15:34:42 lwall Locked $ Patch level: 6 If this is an intentional feature, I apologize. -- raymond@math.berkeley.edu mathematician by training, hacker by choice
cjross@bbn.com (chris ross) (03/29/91)
I set out to write a TCP test client that reads from STDIN and multiple sockets, and immediately ran into a nasty problem. I have the following code, running the degenerate case of only reading from STDIN. (Error- checking is removed for brevity. Environment is perl 3.044 under SunOS 4.0.3) for (;;) { $bits = ""; print("reading\n"); foreach ('STDIN', keys(%Conns)) { vec($bits, fileno($_), 1) = 1; } select($bits, undef, undef, undef); foreach ('STDIN', keys(%Conns)) { next unless vec($bits, fileno($_), 1) == 1; print("got input from $_\n"); # line 'x'; sysread($_, $input, 1000); chop($input); print("got '", $input, "' from $_\n"); # line 'y'; # print("got '$input' from $_\n"); # line 'z'; } } I run this, and begin entering 'a', 'b', 'c', etc. on separate lines, as test input. As written, the script lags behind the input by one line; when I enter 'c', it says "got 'b' from STDIN", and so forth. If I comment out the line marked 'x', the script wakes up every five lines of input, and prints the diagnostics for all five lines at once. If I leave line 'x' in, comment out 'y', and uncomment 'z', the script works as one would expect. Assuming that use of stdio on STDOUT was _somehow_ screwing up STDIN, I wrote the following routine: sub Print { local($s) = join('', @_); syswrite(STDOUT, $s, length($s)); } and replaced the prints with &Prints. It worked. Then, on a lark, I changed the Print routine to do a "print $s" instead of a syswrite, and got quite a shock. It still worked. yarrrrrrrgh. (help.) chris ross "We must not let our failures of imagination tell us what <cjross@bbn.com> must be the case in the universe." -- Patricia Churchland