Perl:如何在XML文件中用相应的实体替换扩展字符?

glm*_*ndr 0 perl

在XML文件中,我需要将字符代码127之上的所有字符转换为它们对应的文字实体(通常转换é为é).

这是我写的,但它不起作用.

sub as_entity{
  my $char = shift;
  return sprintf("&#x%.4x;", ord($char));
}

sub entitify{
  my $str = shift;
  $str =~ s/([\x7f-\x{ffffff}])/(?{as_entity($1)})/g;
  return $str;
}
Run Code Online (Sandbox Code Playgroud)

好像我不能(?{...})在替换部分使用...

实现这一目标的最佳方法是什么?

Mat*_*Mat 6

$str =~ s/([\x7f-\x{ffffff}])/as_entity($1)/ge;
Run Code Online (Sandbox Code Playgroud)

应该够了.(注意额外的/e修饰符.)

  • 应该是`\ x80`而不是`\ x7F`来匹配OP的规格.我把它写成`[^\x00-\x7F]` (3认同)