傳回 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
中的 LATIN CAPITAL LETTER SHARP S (U+1E9E) 在 use locale
的範圍內。此字元的摺疊大小寫通常會是 "ss"
,但如 lc
區段所述,在區域設定中跨越 255/256 邊界的字元大小寫轉換有問題,因此被禁止。因此,此函數在區域設定下會傳回字串 "\x{17F}\x{17F}"
,也就是 LATIN SMALL LETTER LONG S。由於該字元本身會摺疊成 "s"
,因此摺疊大小寫時,兩個字元組成的字串應等於單一的 U+1E9E。
雖然 Unicode 標準定義了兩種額外的摺疊大小寫形式,一種適用於突厥語系,另一種從不將一個字元對應到多個字元,但 Perl 核心並未提供這些形式。不過,CPAN 模組 Unicode::Casing
可用於提供實作。
fc
僅在啟用 "fc"
功能 或在前面加上 CORE::
時才可用。"fc"
功能 會在目前範圍中透過 use v5.16
(或更高版本)宣告自動啟用。