Please note – I am not looking for the ‘right’ way to open/read a file, or the way I should open/read a file every single time. I am just interested to find out what way most people use, and maybe learn a few new methods at the same time :)*
A very common block of code in my Perl programs is opening a file and reading or writing to it. I have seen so many ways of doing this, and my style on performing this task has changed over the years a few times. I’m just wondering what the best (if there is a best way) method is to do this?
I used to open a file like this:
my $input_file = '/path/to/my/file'; open INPUT_FILE, '<$input_file' || die 'Can't open $input_file: $!\n';
But I think that has problems with error trapping.
Adding a parenthesis seems to fix the error trapping:
open (INPUT_FILE, '<$input_file') || die 'Can't open $input_file: $!\n';
I know you can also assign a filehandle to a variable, so instead of using ‘INPUT_FILE’ like I did above, I could have used $input_filehandle – is that way better?
For reading a file, if it is small, is there anything wrong with globbing, like this?
my @array = <INPUT_FILE>;
or
my $file_contents = join( '\n', <INPUT_FILE> );
or should you always loop through, like this:
my @array; while (<INPUT_FILE>) { push(@array, $_); }
I know there are so many ways to accomplish things in perl, I’m just wondering if there are preferred/standard methods of opening and reading in a file?
There are no universal standards, but there are reasons to prefer one or another. My preferred form is this:
The reasons are:
The following is great if the file is small and you know you want all lines:
You can even do this, if you need to process all lines as a single string:
For long files you will want to iterate over lines with while, or use read.