Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Forcing UTF-8 output on STDOUT

by choroba (Archbishop)
on Feb 10, 2021 at 19:36 UTC ( #11128194=note: print w/replies, xml ) Need Help??


in reply to Forcing UTF-8 output on STDOUT

Do you really want to send the output to a file named STDOUT?

If not, use binmode instead of open:

#!/usr/bin/perl use utf8; use strict; use warnings; binmode *STDOUT, ':utf8'; print "foo\n";

Using :encoding(UTF-8) instead of :utf8 would turn on some useful checking, too.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: Forcing UTF-8 output on STDOUT
by ikegami (Pope) on Feb 11, 2021 at 06:21 UTC

    The following would also do the trick:

    use open ':std', ':encoding(UTF-8)';

    It adds the encoding layer to STDIN, STDOUT and STDERR, it does so at compile time, and it sets the default encoding for open in scope.

    Seeking work! You can reach me at ikegami@adaelis.com

Re^2: Forcing UTF-8 output on STDOUT
by mldvx4 (Monk) on Feb 12, 2021 at 11:27 UTC

    Thanks. I had experimented with binmode in different ways, but your example does the job!

Re^2: Forcing UTF-8 output on STDOUT
by mldvx4 (Monk) on Feb 11, 2021 at 17:14 UTC
    Thanks.
    "Do you really want to send the output to a file named STDOUT?"

    Not really. What I was trying to do is have a medium-sized script be able to alternate between writing output to a file or to stdout itself, depending on an option.

    . . . if (defined($opt{'o'})) { $output = $opt{'o'}; $output =~ s/[\0-\x1f]//g; if ($output =~ /^([-\/\w\.]+)$/) { $output = $1; } else { die("Bad path or file name: '$output'\n"); } } else { $output = '/dev/stdout'; } . . . open(my $out, $mode, $output) or die("Could not open '$output' for writing: $!\n");
    That way I can use the same print statements for either purpose. I presume there is a better way for all that, however.
      > alternate between writing output to a file or to stdout itself

      select?

      map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
    A reply falls below the community's threshold of quality. You may see it by logging in.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11128194]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2021-04-13 04:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?