Effect of -C command line switch on `warn` and `die`

2010-04-22 09:56:50
Consider the following script, the source of which is encoded in UTF-8:

use utf8;
use open qw/:utf8 :std/;
my $str = "Käse\n";
print STDOUT $str;
print STDERR $str;
warn         $str;
die          $str;

On a UTF-8 terminal, this prints Käse three times. So far, so good. Now remove 
the open pragma and execute the script using the -C switch, which is documented 
as follows in perlrun as seen at

-C [number/list]
The -C flag controls some of the Perl Unicode features.

As of 5.8.1, the -C can be followed either by a number or a list of option 
letters. The letters, their numeric values, and effects are as follows; listing 
the letters is equal to summing the numbers.

        •     I     1   STDIN is assumed to be in UTF-8
        •     O     2   STDOUT will be in UTF-8
        •     E     4   STDERR will be in UTF-8
        •     S     7   I + O + E

So -C7 or -CS should switch all channels to UTF-8. And they do, but only for 
print, not for warn and die, which seem to remain unaffected by -C. I've seen 
this behaviour for perl 5.8.9 and 5.10.1 for Darwin (Mac), as well as 5.8.7 and 
5.8.9 for Linux.

Don't know if this is a bug or a feature in Perl, or if the Perldoc for the -C 
switch should be updated to reflect the actual behaviour, which seems to be:

        •     E     4   STDERR will be in UTF-8, but
                        `die` and `warn` remain unaffected

Michael.Ludwig (#)

<Prev in Thread] Current Thread [Next in Thread>