Janek Schleicher wrote: > Dan wrote at Sat, 29 Mar 2003 10:20:33 +0000: > > > Just a quick question, what is the meaning of this $| and what is it > > supposed to do? > > From > perldoc perlvar > > $| 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" in perlfunc > for that. (Mnemonic: when you want your pipes to > be piping hot.)
I'll throw in my usual thing here: that it's better to use use IO::Handle; # a standard module autoflush STDOUT; as it's a lot more obvious what you're doing (many others have been confused over this regex-like obscurity) and you're not limited to the currently selected output handle. For instance autoflush STDERR; would have to be select do { my $fh = select STDERR; $| = 1; $fh }; using the pre-defined variable. It's also useful when testing to begin your program like this: use IO::Handle; autoflush STDOUT; autoflush STDERR; print STDERR "STDERR\n"; print STDOUT "STDOUT\n"; so that the output you see is in the order it happens. Without the autoflush calls ( or even with just $| = 1 ) the above program will output STDOUT STDERR if both handles are directed to the console as usual. Cheers, Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]