In Perl, how can I read an entire file into a string?
Solution 1:
I would do it like this:
my $file = "index.html";
my $document = do {
local $/ = undef;
open my $fh, "<", $file
or die "could not open $file: $!";
<$fh>;
};
Note the use of the three-argument version of open. It is much safer than the old two- (or one-) argument versions. Also note the use of a lexical filehandle. Lexical filehandles are nicer than the old bareword variants, for many reasons. We are taking advantage of one of them here: they close when they go out of scope.
Solution 2:
Add:
local $/;
before reading from the file handle. See How can I read in an entire file all at once?, or
$ perldoc -q "entire file"
See Variables related to filehandles in perldoc perlvar
and perldoc -f local
.
Incidentally, if you can put your script on the server, you can have all the modules you want. See How do I keep my own module/library directory?.
In addition, Path::Class::File allows you to slurp and spew.
Path::Tiny gives even more convenience methods such as slurp
, slurp_raw
, slurp_utf8
as well as their spew
counterparts.
Solution 3:
With File::Slurp:
use File::Slurp;
my $text = read_file('index.html');
Yes, even you can use CPAN.