use Modern::Perl '2015'; my $encoding = $^O eq 'MSWin32' ? 'cp1252' : 'utf8'; say "Encoding: $encoding <"; binmode(STDOUT, ":encoding($encoding)" ); binmode(STDERR, ":encoding($encoding)" ); binmode(STDIN, ":encoding($encoding)" ); # each open() automatically uses :encoding($encoding) use open ':encoding($encoding)'; my $res_file = "Erg.txt"; open(my $fh, ">:encoding($encoding)", $res_file) or die "Could not open file '$res_file'"; say $fh "Umlaute: äöüßÄÖÜ"; say $fh "Euro €"; say "Umlaute: äöüßÄÖÜ"; say "Euro €"; close $fh;