在 N 内插值变量

  • 本文关键字:插值 变量 regex perl
  • 更新时间 :
  • 英文 :


我想制作一个脚本,它应该能够将输入转换为小写字母。我尝试了以下代码

use strict;
use warnings;
use utf8;
use feature qw(say);
binmode STDOUT, ":utf8";
my $text = join '',<STDIN>;
say $text=~s/[a-zA-Z]/N{LATIN LETTER SMALL CAPITAL $&}/gr;

但我得到

未知字符名称"拉丁字母小写字母 $&"在第 7 行 small.pl, 在字符串中 由于编译错误而中止 small.pl 的执行。

我对其他方法持开放态度。

N{}是一个编译时构造。使用字符名称在运行时按名称查找字符。

perl -C -mcharnames -E'
    say chr charnames::vianame(
        "LATIN LETTER SMALL CAPITAL " . $_
    ) for qw(I N R)
'

N{}是一个编译时构造。因此,一种解决方案是生成代码并对其进行评估。 s////ee的形式对此提供了内置支持。

use open ':encoding(UTF-8)';
use feature qw(say);
my $text = 'A';
say $text =~ s/([a-zA-Z])/ qq{"\N{LATIN LETTER SMALL CAPITAL $1}"} /eer;

工作原理:

  1. 第一个e导致qq{"\N{LATIN LETTER SMALL CAPITAL $1}"}进行评估,产生"N{LATIN LETTER SMALL CAPITAL A}"
  2. 第二e导致"N{LATIN LETTER SMALL CAPITAL A}"被评估,产生
  3. A替换为

相关内容

  • 没有找到相关文章

最新更新