use strict; use warnings; my $x = "\x{42f}"."\n"; warn "printing to /tmp/foo\n"; open(my $fh, ">:utf8", "/tmp/foo") or die "open: $!"; print {$fh} $x; warn "printing to STDOUT\n"; print $x; warn "printing to duped STDOUT\n"; open(my $gh, ">&:utf8", \*STDOUT) or die "open: $!"; print {$gh} $x; #### $ LANG=C ./script printing to /tmp/foo printing to STDOUT Wide character in print at t5 line 13. Ҋ printing to duped STDOUT Ҋ $ LANG=en_US.UTF-8 ./script printing to /tmp/foo printing to STDOUT Ҋ printing to duped STDOUT Ҋ $ LANG=C ./script > /tmp/out printing to /tmp/foo printing to STDOUT Wide character in print at t5 line 13. printing to duped STDOUT Wide character in print at t5 line 18. $ LANG=en_US.UTF-8 ./script > /tmp/out printing to /tmp/foo printing to STDOUT printing to duped STDOUT Wide character in print at t5 line 18.