On Jan 29, Stephen Turner said: >On Tue, 29 Jan 2002, Jeff 'japhy' Pinyan wrote: >> >> Well, because $| is the magical flip-flop variable, so long as you -- it >> and not ++ it. > >This I didn't know. Where is this documented? man perlvar (nope)? Camel book >page 237 or 670 (NAFAICS)?
Well, it's "documented" in mg.c, around line 786. Here's an excerpt from Perl_magic_get(): case '|': sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 ); break; We see that it's setting it to (...) != 0, which will be either 1 or 0. And here's an excerpt from Perl_magic_set() (around line 1987): case '|': { IO *io = GvIOp(PL_defoutgv); if(!io) break; if ((SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv)) == 0) IoFLAGS(io) &= ~IOf_FLUSH; else { if (!(IoFLAGS(io) & IOf_FLUSH)) { PerlIO *ofp = IoOFP(io); if (ofp) (void)PerlIO_flush(ofp); IoFLAGS(io) |= IOf_FLUSH; } } } break; So if the value we are setting $| to is ZERO, flushing is turned off; for all other values, flushing is turned on. THEN, when we look at the code for Perl_magic_get(), and we notice that it merely returns 1 or 0 based on whether flushing is off or on. So it retains absolutely nothing about the value you gave $|. So how does $|-- work? $| starts at 0. $|-- is like $| = $| - 1, which is like $| = 0 - 1, which internally turns autoflush ON. When we do $|-- again, it's like $| = $| - 1 again, except now $| returns 1 instead of 0, so the value is $| = 1 - 1, or 0. Hooray for flip-flops. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ ** Look for "Regular Expressions in Perl" published by Manning, in 2002 ** <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course.