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]