http://www.perlmonks.org?node_id=698656


in reply to Re: perl loop counter
in thread perl loop counter

Only if you're printing to a file. If STDOUT is connected to a terminal (as it is most of the time) it won't be buffered.

Update: I must be drinking the stupid juice today. Ttys are line-buffered, duh.

Replies are listed 'Best First'.
Re^3: perl loop counter
by almut (Canon) on Jul 18, 2008 at 16:20 UTC
    ...it won't be buffered

    Actually, STDOUT is line buffered by default when connected to a tty, i.e. - as zentara said - output will be written either upon encountering a newline, or when the buffer has filled up (or when the program terminates, and the buffer gets flushed).

    Try playing with something like

    for (1..3000){ print "$_ "; sleep 5 unless $_ % 1000; }
Re^3: perl loop counter
by zentara (Archbishop) on Jul 18, 2008 at 16:22 UTC
    Are you sure? On my linux xterm, this prints out in roughly 2k chunks.
    #!/usr/bin/perl for (1..6000){ print $_; select (undef,undef,undef,.001); #small delay to see buffering effects }

    I'm not really a human, but I play one on earth CandyGram for Mongo
      try
      for (1..6000){ print "$_ " ; print "\n" if /00$/; select (undef,undef,undef,.0001); }
      and you'll see that when you give it a newline, it flushes.
      []s, HTH, Massa