http://www.perlmonks.org?node_id=1052262


in reply to Using pragma utf8::all in processing non-utf data.

Hello humble and monks.

As daxim says, utf8::all dies because it imports its setting to your current code. In this case, "use warnings FATAL =>'utf8'" is imported from utf8::all and it dies. Below dies with utf8::all.

print "before shiftjis\n"; open( my $fh, "<", "107.shiftjis.txt") or die $!; print join('', <$fh>); close $fh;
If you disable "use warnings FATAL =>'utf8'" temporally, I guess you will not die.
use warnings NONFATAL =>'utf8'; #disable print "before shiftjis\n"; open( my $fh, "<", "107.shiftjis.txt") or die $!; print join('', <$fh>); close $fh; "use warnings FATAL =>'utf8'"; #enable
regards

Replies are listed 'Best First'.
Re^2: Using pragma utf8::all in processing non-utf data.
by daxim (Curate) on Sep 04, 2013 at 14:34 UTC
    Just unfataling or disabling the warning makes no sense. The :encoding(UTF-8) IO layer will still be active and the readline function will produce garbage input.

      Hello daxim.

      As you says, we have to detect it's encode and decode its 'characters' into perl's internal encoding. ":pop" will give you un-encoded $fh. It also makes no sense.

      And one more for utf8:all. Please refer its problem in this thread "How can I safely unescape a string.". After all, utf8:all never frees you from encoding troubles.

      regards