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]

Reply via email to