I have a Perl 5.30.0 program on Ubuntu where the combination of File::Slurp
and open ':std', ':encoding(UTF-8)'
results in UTF8 not getting read correctly:
use strict;
use warnings;
use open ':std', ':encoding(UTF-8)';
use File::Slurp;
my $text = File::Slurp::slurp('input.txt');
print "$text\n";
with "input.txt" being an UTF8 encoded text file with this content (no BOM):
ö
When I run this, the ö
gets displayed as ö
. Only when I remove the use open...
line, it works as expected and the ö
is printed as an ö
.
When I manually read the file like below, everything works as expected and I do get the ö
:
$text = '';
open my $F, '<', "input.txt" or die "Cannot open file: $!";
while (<$F>) {
$text .= $_;
}
close $F;
print "$text\n";
Why is that and what is the best way to go here? Is the open
pragma outdated or am I missing something else?