使用 perl 将 Fraktur 符号转换为实体

Fraktur symbols into Entities conversion using perl

我需要将 Fraktur 符号转换为命名实体:

my $input = ", ,  is a symbols of fraktur";

预期输出:

$output = "𝔄, 𝔅, 𝔇 is a symbols of fraktur";

代码:

use Win32;
use open ':encoding(utf8)';
binmode STDOUT, ':utf8';

my %fraktursChr = ("𝔄" => "", "𝔅" => "", "𝔇" => "");

foreach my $key (keys %fraktursChr)
{
    print "Key: $key-->$fraktursChr{$key}\n ";
    $input=~s/\Q$fraktursChr{$key}\E/$key/g;
}

但是我无法使用 utf8 替换符号:如果有人可以帮助解决这个问题,我将不胜感激。

use utf8; 需要添加以告诉 Perl 源代码是使用 UTF-8 编码的。

use utf8;                              # Source code is encoded using UTF-8.
use open ':std', ':encoding(UTF-8)';   # Terminal expects/provides UTF-8.

my $input = ",  , is a symbols of fraktur";
my %fraktursChr = ("𝔄" => "", "𝔅" => "", "𝔇" => "",);
foreach my $key (keys %fraktursChr)
{
    $input=~s/\Q$fraktursChr{$key}\E/$key/g;
}

print $input;

感谢PerlDuck and Dave Cross

实际上不是答案,而是性能改进建议:

my $fraktursChr_pat = join '|', map quotemeta, keys %fraktursChr;
my $fraktursChr_re = qr/($fraktursChr_pat)/;

$input =~ s/$fraktursChr_re/$fraktursChr{}/g;