David <[EMAIL PROTECTED]> wrote:
> i agree. the part that make people confuse is that most people
> think $| is a variable holding a number. that's not necessary
> the case. Perl could have(easily) implmented $| to be a bit
> (save memory and faster access and manipulation etc) position
> of a number. many c functions does that.
It *is* a bit, actually...
Perl filehandles look like:
struct xpvio {
[ big snip ]
long xio_lines; /* $. */
long xio_page; /* $% */
long xio_page_len; /* $= */
long xio_lines_left; /* $- */
char * xio_top_name; /* $^ */
GV * xio_top_gv; /* $^ */
char * xio_fmt_name; /* $~ */
GV * xio_fmt_gv; /* $~ */
char * xio_bottom_name; /* $^B */
GV * xio_bottom_gv; /* $^B */
short xio_subprocess; /* -| or |- */
char xio_type;
char xio_flags;
};
The "autoflush" for a given filehandle is a bit in the
xio_flags, and get/setting $| just toggles that bit.
It affects the "default" filehandle, which is STDOUT
or whatever you select().
And see also the IO::Handle manpage... all these magic
globals to influence the "current" or "default" filhandle
turn into well-behaved, orderly methods of that class.
> when you assign something to it, it merely sets this bit
> to 0 or 1 but not actually assigne any value to it.
Exactly. The actual value you assign is ignored, and only
tested for truth/falseness.
--
Steve
perldoc -qa.j | perl -lpe '($_)=m("(.*)")'
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]