Apparently i replied off-list.  Here's my reply for those following along
at home.

// Bill

---------- Forwarded message ----------


Is your interactive commandline provided by (ba)sh or [tcz]sh ?
I see your script is Csh.
That's one possible difference since that's where the pipe is actually
created and sub-process spawned.

$| won't
​do what you want.

perldoc -v '$|'

HANDLE->autoflush( EXPR )
$OUTPUT_AUTOFLUSH
$|

If set to nonzero, forces a flush right away and after every write or print
on the currently selected output channel. Default is 0 (regardless of
whether the channel is really buffered by the system or not; $| tells you
only whether you've asked Perl explicitly to flush after each write).
STDOUT will typically be line buffered if output is to the terminal and
block buffered otherwise. Setting this variable is useful primarily when
you are outputting to a pipe or socket, such as when you are running a Perl
program under rsh and want to see the output as it's happening. This has no
effect on input buffering. See getc for that. See select on how to select
the output channel. See also IO::Handle.

Mnemonic: when you want your pipes to be piping hot.

​ If you want actual non-blocking output in an output pipe or to a file, I
_think_ you'll need
​
perldoc IO::Handle

​*$io->blocking ( [ BOOL ] )*

If called with an argument blocking will turn on non-blocking IO if BOOL is
false, and turn it off if BOOL is true.

blocking will return the value of the previous setting, or the current
setting if BOOL is not given.

If an error occurs blocking will return undef and $! will be set.
​as in
 $io->blocking( 0 ) or croak "$!: io->blocking ( 0 )";

​the "sub init" for SSL-capable netcat script "scnc" does :

   $SIG{INT}  = sub { $self->exit };
   $SIG{CHLD} = 'IGNORE';

   STDOUT->blocking(0);
   STDOUT->autoflush(1);
   STDIN->blocking(0);
   STDIN->autoflush(1);
​

_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to