Re: Invalid UTF-8 characters causing MARC::Record crash.
[email protected] (Dave Sherohman) Tue, 17 May 2011 16:44:07 +0200
| Newsgroups | perl.perl4lib |
|---|---|
| Message-ID | <1305643447.2067.39.camel@hactar> |
On Tue, 2011-05-17 at 07:27 -0700, Al wrote:
> For me I've found the best solution is to leave Encode.pm
> alone and redefine the offending subroutine within my processing script. I
> paste this in at the bottom of every script:
I always feel a little funny about promoting my own modules, but this
sounds like a perfect case for LocalOverride
( http://search.cpan.org/~dsheroh/LocalOverride-1.000/lib/LocalOverride.pm )
Create a Local/Encode.pm module containing:
--- cut here ---
package Encode; # Note: NOT Local::Encode!
use Encode::Alias;
no warnings 'redefine';
sub decode($$;$)
{
my ($name,$octets,$check) = @_;
my $altstring = $octets;
return undef unless defined $octets;
$octets .= '' if ref $octets;
$check ||=0;
my $enc = find_encoding($name);
unless(defined $enc){
require Carp;
Carp::croak("Unknown encoding '$name'");
}
my $string;
eval { $string = $enc->decode($octets,$check); };
$_[1] = $octets if $check and !($check & LEAVE_SRC());
if ($@) {
return $altstring;
} else {
return $string;
}
}
--- cut here ---
and add the line "use LocalOverride;" to your main script and
LocalOverride should take it from there, at least in theory.