in reply to Re: Write contents of a file, whilst reading from another file
in thread Write contents of a file, whilst reading from another file

It'll be more efficent if you read the file in via blocks instead of line-by-line:

while(my $in = read(FILE1, $buf, 4096)) { do_stuff(); print $buf; }

Though it may not really matter, depending on the file size (the size given by the orginal post is small enough that you probably won't notice the difference in practice). Also, depending on what is put in do_stuff(), line-by-line might be more convieant.

----
I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
-- Schemer

Note: All code is untested, unless otherwise stated

Replies are listed 'Best First'.
Re: Re: Re: Write contents of a file, whilst reading from another file
by Limbic~Region (Chancellor) on Apr 01, 2003 at 23:25 UTC
    hardburn,
    Just a minor clarifcation as your post is correct, but potentially misleading. You should check out Chromatic's reply to my post saying basically the same thing as you.

    Perl does not stop reading a file at a newline and have to go back out each time it encounters a newline. It reads to a buffer and each readline is taken from that buffer. The disk is not read again until the buffer is exhausted. You are showing one way of changing the buffer size. I used a different method $/ = \65536; Depending on what data munging is going on inbetween each readline and how big the file is can determine if you should use sysreads with a specified buffer as you have shown, or change the input record seperator $/, or use combination of both.

    The only reason I clarify here is because I can see some inexperienced monks think that while <FILE> {}; as being inefficient, prematurely optimize, and end up with a headache back here asking for advice.

    Cheers - L~R