It’s a nasty little idiom for setting autoflush on a filehandle other than STDOUT.
select()
takes the supplied filehandle and (basically) replaces STDOUT with it, and it returns the old filehandle when it’s done.
So (select($s),$|=1)
redirects the filehandle (remember select
returns the old one), and sets autoflush ($| = 1
). It does this in a list ((...)[0]
) and returns the first value (which is the result of the select
call – the original STDOUT), and then passes that back into another select
to reinstate the original STDOUT filehandle. Phew.
But now you understand it (well, maybe ;)), do this instead:
use IO::Handle;
$fh->autoflush;