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

[email protected] (Michael Ludwig) Thu, 22 Apr 2010 16:56:39 +0200
Newsgroups perl.unicode
Message-ID <[email protected]>
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 http://perldoc.perl.org/perlrun.html:

----8<----
-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
----8<----

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 (#) XING.com