返回 EXPR 的折叠大小写版本。这是在双引号字符串中实现 \F
转义的内部函数。
折叠大小写是将字符串映射到大小写差异被消除的格式的过程;以折叠大小写格式比较两个字符串实际上是一种询问两个字符串是否相等的方法,而不管大小写如何。
粗略地说,如果你发现自己写了以下内容
lc($this) eq lc($that) # Wrong!
# or
uc($this) eq uc($that) # Also wrong!
# or
$this =~ /^\Q$that\E\z/i # Right!
现在你可以写
fc($this) eq fc($that)
并获得正确的结果。
Perl 仅实现折叠大小写的完整形式,但你可以使用 "casefold()" in Unicode::UCD 和 "prop_invmap()" in Unicode::UCD 访问简单的折叠。有关折叠大小写的更多信息,请参阅 Unicode 标准,具体来说是第 3.13 节 默认大小写操作
、第 4.2 节 大小写规范
和第 5.18 节 大小写映射
,可在 https://www.unicode.org/versions/latest/ 获得,以及可在 https://www.unicode.org/charts/case/ 获得的大小写图表。
如果省略 EXPR,则使用 $_
。
此函数在各种编译指令下表现相同,例如在 "use feature 'unicode_strings"
中,与 lc
一样,唯一的例外是 fc
在 use locale
范围内的大写拉丁字母夏普 S (U+1E9E)。此字符的折叠形式通常为 "ss"
,但正如 lc
部分所解释的,跨越 255/256 边界的字母大小写转换在区域设置下存在问题,因此被禁止。因此,此函数在区域设置下返回字符串 "\x{17F}\x{17F}"
,即小写拉丁字母长 S。由于该字符本身折叠为 "s"
,因此折叠时,两个字符的字符串应等效于单个 U+1E9E。
虽然 Unicode 标准定义了另外两种折叠形式,一种用于突厥语,另一种永远不会将一个字符映射到多个字符,但 Perl 核心不提供这些形式。但是,CPAN 模块 Unicode::Casing
可用于提供实现。
fc
仅在启用 "fc"
功能 或在它之前加上前缀 CORE::
时才可用。在当前范围内声明 use v5.16
(或更高版本)时,"fc"
功能 会自动启用。