The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package XML::Liberal::Remedy::ControlCode;
use strict;

my $ERROR_RX = do {
    my $pat = join '|', (
        'CData section not finished',
        'PCDATA invalid Char value \d+',
        'Char 0x[0-9A-F]+ out of allowed range',
    );
    qr/^parser error : (?:$pat)/;
};

sub apply {
    my $class = shift;
    my($driver, $error, $xml_ref) = @_;

    return 0 if $error->message !~ $ERROR_RX;
    return 1 if $$xml_ref =~ s/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]+//g;

    Carp::carp("Can't find control code line, error was: ", $error->summary);
    return 0;
}

1;