open my $filehandle, '<', $name_of_file or die "Can't open $name_of_file, $!";
This is the basic idiom for "default" File IO and makes
$filehandle a readable input stream of
bytes, filtered by a default system-specific decoder, which can be locally set with the
Perl itself does not handle errors in file opening, so you have to handle those yourself by checking the exit condition of
$! is populated with the error message that caused open to fail.
On Windows, the default decoder is a "CRLF" filter, which maps any "\r\n" sequences in the input to "\n"
open my $filehandle, '<:raw', 'path/to/file' or die "Can't open $name_of_file, $!";
This specifies that Perl should not perform a
CRLF translation on Windows.
open my $filehandle, '<:raw:encoding(utf-8)', 'path/to/file' or die "Can't open $name_of_file, $!";
This specifies that Perl should both avoid
CRLF translation, and then decode the resulting bytes into strings of characters ( internally implemented as arrays of integers which can exceed 255 ), instead of strings of bytes