Beefy Boxes and Bandwidth Generously Provided by pair Networks Bob
more useful options
 
PerlMonks  

Re^3: Weird STDERR/SIGDIE/Encodings issue

by McA (Deacon)
on Mar 28, 2013 at 23:51 UTC ( #1026059=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Weird STDERR/SIGDIE/Encodings issue
in thread Weird STDERR/SIGDIE/Encodings issue

Concerning the recursion I speculated about the following: You're right that the sig handler is disabled, but the standard die functionality is done anyway. So the error string is printed via STDERR on which you enabled the encoding IO layer with binmode. The following code reproduces the error:

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Encode; $SIG{__DIE__} = sub { if (defined $^S && $^S == 0) { for my $s (0..$#_) { dcs($_[$s]); }; } }; sub dcs { print Dumper(\@_); my ($p1, $p2) = @_; my @caller = caller(0); print Dumper(\@caller); print STDERR $caller[1]; print STDERR "me: " . $p1; } sub mysub { die; } binmode STDERR, ":encoding(koi8-r)"; binmode STDOUT, ":encoding(koi8-r)"; mysub();

As soon as you change the line

print STDERR $caller[1];
by
print STDOUT $caller[1];
you don't get the hanging behaviour.

UPDATE: If you keep the first version but you insert the follwoing line in the if-clause of your die-handler

binmode STDERR, ':raw';
you also don't get the hanging behaviour even when printing at STDERR.

McA


Comment on Re^3: Weird STDERR/SIGDIE/Encodings issue
Select or Download Code
Re^4: Weird STDERR/SIGDIE/Encodings issue
by vsespb (Hermit) on Mar 29, 2013 at 10:30 UTC
    OK. Seems you are right! Thanks! BTW I tried to reproduce it on FreeBSD system with non-Unicode locale (i.e. console, locale and filenames are in KOI8-R). But seems it works fine (perl 12) and escapes characters (while escape are wrong):
    "\x{00d5}" does not map to koi8-r at \x{0552}\x{006f}33.pl line 18. "\x{00d2}" does not map to koi8-r at \x{0552}\x{006f}33.pl line 18. "\x{00c1}" does not map to koi8-r at \x{0552}\x{006f}33.pl line 18. ... Died at \x{0552}\x{006f}33.pl line 28.
    While linux (perl 10 and perl 14) does not try to escape (probably detects UTF8 locale)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (9)
As of 2014-04-17 06:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (440 votes), past polls