FAQ 5.26 How can I read in an entire file all at once?

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

This message is one of several periodic postings to comp.lang.perl.misc
intended to make it easier for perl programmers to find answers to
common questions. The core of this message represents an excerpt
from the documentation provided with Perl.


5.26: How can I read in an entire file all at once?

    You can use the File::Slurp module to do it in one step.

            use File::Slurp;

            $all_of_it = read_file($filename); # entire file in scalar
        @all_lines = read_file($filename); # one line perl element

    The customary Perl approach for processing all the lines in a file is to
    do so one line at a time:

        open (INPUT, $file)         || die "can't open $file: $!";
        while (<INPUT>) {
            # do something with $_
        close(INPUT)                || die "can't close $file: $!";

    This is tremendously more efficient than reading the entire file into
    memory as an array of lines and then processing it one element at a
    time, which is often--if not almost always--the wrong approach. Whenever
    you see someone do this:

        @lines = <INPUT>;

    you should think long and hard about why you need everything loaded at
    once. It's just not a scalable solution. You might also find it more fun
    to use the standard Tie::File module, or the DB_File module's $DB_RECNO
    bindings, which allow you to tie an array to a file so that accessing an
    element the array actually accesses the corresponding line in the file.

    You can read the entire filehandle contents into a scalar.

            local(*INPUT, $/);
            open (INPUT, $file)     || die "can't open $file: $!";
            $var = <INPUT>;

    That temporarily undefs your record separator, and will automatically
    close the file at block exit. If the file is already open, just use

        $var = do { local $/; <INPUT> };

    For ordinary files you can also use the read function.

            read( INPUT, $var, -s INPUT );

    The third argument tests the byte size of the data on the INPUT
    filehandle and reads that many bytes into the buffer $var.


Documents such as this have been called "Answers to Frequently
Asked Questions" or FAQ for short.  They represent an important
part of the Usenet tradition.  They serve to reduce the volume of
redundant traffic on a news group by providing quality answers to
questions that keep coming up.

If you are some how irritated by seeing these postings you are free
to ignore them or add the sender to your killfile.  If you find
errors or other problems with these postings please send corrections
or comments to the posting email address or to the maintainers as
directed in the perlfaq manual page.

Note that the FAQ text posted by this server may have been modified
from that distributed in the stable Perl release.  It may have been
edited to reflect the additions, changes and corrections provided
by respondents, reviewers, and critics to previous postings of
these FAQ. Complete text of these FAQ are available on request.

The perlfaq manual page contains the following copyright notice.


    Copyright (c) 1997-2002 Tom Christiansen and Nathan
    Torkington, and other contributors as noted. All rights

This posting is provided in the hope that it will be useful but
does not represent a commitment or contract of any kind on the part
of the contributers, authors or their agents.

Site Timeline