在 \N 内插入变量
2019-06-13
61
我想编写一个脚本,该脚本应该能够将输入转换为小写大写字母。 我尝试了以下代码
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;
但是我得到了
Unknown charname '"LATIN LETTER SMALL CAPITAL $&"' at small.pl line 7, within string Execution of small.pl aborted due to compilation errors.
我愿意尝试其他方法。
2个回答
\N{} 是编译时构造。使用
charnames
在运行时按名称查找字符。
perl -C -mcharnames -E'
say chr charnames::vianame(
"LATIN LETTER SMALL CAPITAL " . $_
) for qw(I N R)
'
daxim
2019-06-13
\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;
工作原理:
-
第一个
e
导致qq{"\\N{LATIN LETTER SMALL CAPITAL $1}">
被评估,产生"\N{LATIN LETTER SMALL CAPITAL A}"
。 -
第二个
e
导致"\N{LATIN LETTER SMALL CAPITAL A}"
被评估,产生ᴀ
。 -
A
被ᴀ
替换。
Håkon Hægland
2019-06-13