我想制作一个脚本,它应该能够将输入转换为小写字母。我尝试了以下代码
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;
工作原理:
- 第一个
e
导致qq{"\N{LATIN LETTER SMALL CAPITAL $1}"}
进行评估,产生"N{LATIN LETTER SMALL CAPITAL A}"
。 - 第二
e
导致"N{LATIN LETTER SMALL CAPITAL A}"
被评估,产生ᴀ
。 A
替换为ᴀ
。