Я работаю с библиографическими записями, в которых для разделения текста используются управляющие символы. Когда я использую имя символа Unicode «STRING TERMINATOR» в операциях замены, я получаю предупреждение «Malformed UTF-8», если текст содержит «Ü». Подстановка работает с другими именами символов Unicode и текстом, содержащим "ü", "ä", "é", ...
#!/usr/bin/perl
use v5.12;
use utf8;
use strict;
use autodie;
use warnings;
# use warnings qw< FATAL utf8 >;
use charnames qw< :full >;
use feature qw< unicode_strings >;
binmode STDOUT, ':utf8';
my @records = (qq[\N{U+0098}L'\N{U+009c} Année du Figaro], qq[\N{U+0098}The\N{U+009c} famous ümläut], qq[\N{U+0098}The\N{U+009c} famous Ümlaut], qq[\N{U+0098}\N{U+00DC}\N{U+009c}]);
my %replace = (
"\N{START OF STRING}" => "<ns>",
"\N{STRING TERMINATOR}" => "</ns>",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
foreach my $record (@records){
$record =~ s/($regex)/$replace{$1}/g;
say $record;
};
Я использую Strawberry Perl v5.12.3.0.
Что можно сделать, чтобы избежать этих предупреждений?
Спасибо, Джорол