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


in reply to Re^3: How can you sysread an entire file?
in thread How can you sysread an entire file?

OK :)

Here's an example...

my $rec; sysopen(DF,"test.txt", O_RDONLY | O_CREAT); sysread(DF, $rec, -s DF); close DF; # Split up records into array. # Will lose \n on recs - add later. @test=split("\n",$rec); # Do some work on @test Work... Work... Work... # Build up into a single record, putting \n back in my $rec;foreach(@test){$rec.=$_."\n";} sysopen(DF,"test.txt", O_WRONLY | O_CREAT); syswrite DF,$rec; close DF;
Does that help set the scene a little better? :)

So basically I want to make this as efficient as possible. I have to use SYSREAD and SYSWRITE to make the IO as optimal as possible. ie: Reading a 1 meg file would take 2000 IO processes if buffered!!!!! SYSREAD will in effect take 1!

Replies are listed 'Best First'.
Re^5: How can you sysread an entire file?
by BrowserUk (Patriarch) on Jan 14, 2006 at 17:56 UTC

    It won't affect your IO count but

    my $rec;foreach(@test){$rec.=$_."\n";}

    Is much better coded as

    my $rec = join "\n", @test;

    roughly 3 times faster on 1000 elements.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Thanks! Anything like that is most appreciated!