The questions are "Why are you opening and closing after every file?" and "What do you mean by 'intelligent' logging?". Or more generally, "What problem are you trying to solve?".

Turning off buffering (or turning on auto-flush which amounts to the same thing), for a particular filehandle, can be done easily using select:

select $fh; $| = 1; select STDOUT;

but turning autoflush on/buffering off will slow your IO down in most cases. You'd be better off increasing the the buffering if you are writing large volumes to the same file.

If IO is really slowing your processing substantially--and you need to verify this is the case otherwise your wasting your time--after you avoided constantly reopening the file which if it's the same file is totally unnecessary, then there are some things that you can do to reduce the perl internal overhead which might make a little difference.

If that is still not sufficient for your needs, then you can implement a form of asynchronous IO using a thread and a memory-file filehandle to provide additional buffering, but for that to be effective, you need to be generating very large volumes of data at very high speeds.

If your running on Win32, you could use real asynchronous IO by dropping to the system api level.

But for any of these things to be worth the effort, you have to know that IO is your bottle neck.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon

In reply to Re: Intelligent logging by BrowserUk
in thread Intelligent logging by Muoyo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.