Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

RE: Return the contents of a file

by btrott (Parson)
on Feb 04, 2000 at 23:31 UTC ( #2878=note: print w/replies, xml ) Need Help??


in reply to Return the contents of a file

Two things:

1) that while loop should read:

while (<FS>) { $OP .= $_ }
Note the all-important ".=" instead of "=" (probably just a mistype on your part. :)

2) your opens should always check for error messages, and you should get faster results slurping the whole file in as one string, like so:

sub readfile { my $OP; open FS, $_[0] or die "Can't open $_[0]: $!"; { local $/ = undef; $OP = <FS>; } close FS or die "Can't close $_[0]: $!"; return $OP; }

Replies are listed 'Best First'.
RE: Return the contents of a file
by turnstep (Parson) on Apr 12, 2000 at 18:02 UTC

    Here's another version:

    sub readfile { local $/="" unless wantarray; return open(FS, shift) ? <FS> : undef; }
    No 'my' variables, handles both string and array requests, and returns undef if the file could not be opened. Use it like this:

    defined($slurp = &readfile($file)) or die "Could not open $file: $!\n" +; print "Scalar 'slurp' now has ", length $slurp, " characters in it\n"; defined(@slurp = &readfile($file)) or die "Could not open $file: $!\n" +; print "Array 'slurp' now has ", $#slurp, " elements in it.\n";
      WOW!
      Just loves to see this.
      -anders
RE: RE: Return the contents of a file
by Chris (Novice) on Apr 12, 2000 at 05:50 UTC
    I REALLY do like this one. I've found that it works great for small files. Has anyone had any experiences using this technique w/ something large like a *.cvs file from a database dump? Are there any memory issues to handling a variable that large. -- I shouldn't thinks so. Hmmm...
      There *are* memory issues in having very large variables, just as there would be, presumably, in any language. Perl variables take up a lot of space. From perlfaq3:
      When it comes to time-space tradeoffs, Perl nearly always prefers to throw memory at a problem. Scalars in Perl use more memory than strings in C, arrays take more that, and hashes use even more.
      I mean, if you *can* process a file line by line, it's best to do so.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://2878]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (2)
As of 2023-06-04 00:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How often do you go to conferences?






    Results (17 votes). Check out past polls.

    Notices?