It's similar, but there are some differences (which may or may not be important):
- the local $/ has a very tight scope which may be important if you read additional files and don't want to get them in slurp mode.
- no global filehandles.
- a minimum of error handling
- filenames hardcoded only once
well, you can also get point 1 with an ordinary block, e.g.
my ($content, $IN);
unless (open ($IN, "<", $file)) {
die "Error in reading '$file': $!\n";
} # unless
else {
local $/ = undef; # valid only until end of block
binmode($IN);
$content = <$IN>;
close ($IN);
} # else
or the like.
Global filehandles have a problem: they are global, and if you open(IN, ...) and another IN is already opened, the first IN is closed. In some cases (e.g. recursions, reading filenames out of a file and opening them in a subroutine) this may be fatal.
point 4 is in my eyes important that it is not good to write something like:
unless (open ($IN, "<", "file1.txt")) {
die "Error in reading 'file1.txt': $!\n";
} # unless
because if the filename changes to something different, there is the danger you forget to change the filename in the die-message (or just do a stupid typo) and you or somebody else searches for the wrong problem
Best regards,
perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"
|