Perl fc Function
last modified April 4, 2025
The Perl fc function performs Unicode case folding on strings.
It returns a case-folded version of the input string.
Case folding is similar to case conversion but more comprehensive. It's used for case-insensitive string comparisons in Unicode-aware applications.
Basic fc Usage
The simplest way to use fc is on a single string.
#!/usr/bin/perl use strict; use warnings; use v5.16.0; # fc introduced in Perl 5.16 my $text = "Hello World"; my $folded = fc($text); print "Original: $text\n"; print "Folded: $folded\n";
We demonstrate fc converting a string to its case-folded form.
The function returns a new string without modifying the original.
$ ./basic.pl Original: Hello World Folded: hello world
Case-Insensitive Comparison
fc enables reliable case-insensitive string comparisons.
#!/usr/bin/perl
use strict;
use warnings;
use v5.16.0;
my $str1 = "Straße";
my $str2 = "STRASSE";
if (fc($str1) eq fc($str2)) {
print "Strings are equal when case-folded\n";
} else {
print "Strings are not equal\n";
}
This script compares German words with different cases and forms. The ß/SS equivalence is handled correctly by case folding.
$ ./compare.pl Strings are equal when case-folded
fc vs lc/uc
fc provides more comprehensive case handling than lc.
#!/usr/bin/perl use strict; use warnings; use v5.16.0; my $text = "İstanbul"; print "Original: $text\n"; print "lc: ", lc($text), "\n"; print "fc: ", fc($text), "\n";
With Turkish dotted I, fc handles the special case correctly.
Simple lowercase conversion might not handle all Unicode cases properly.
$ ./comparison.pl Original: İstanbul lc: i̇stanbul fc: i̇stanbul
Using fc with Arrays
fc can process array elements with map.
#!/usr/bin/perl
use strict;
use warnings;
use v5.16.0;
my @words = ("Apple", "BANANA", "Cherry");
my @folded = map { fc } @words;
print "Original: @words\n";
print "Folded: @folded\n";
We apply fc to each array element using map.
This creates a new array with case-folded versions of all strings.
$ ./array.pl Original: Apple BANANA Cherry Folded: apple banana cherry
Case Folding with Regular Expressions
fc can be combined with regex for advanced matching.
#!/usr/bin/perl
use strict;
use warnings;
use v5.16.0;
my $text = "The Greek letter Σ (sigma) has lowercase form σ or ς";
if (fc($text) =~ /ς/) {
print "Found final sigma form\n";
}
This script demonstrates finding different sigma forms using case folding. The final sigma (ς) is matched regardless of its original case.
$ ./regex.pl Found final sigma form
Case Folding with Hashes
fc helps create case-insensitive hash keys.
#!/usr/bin/perl
use strict;
use warnings;
use v5.16.0;
my %color = (fc("Red") => "#FF0000", fc("Green") => "#00FF00");
my $input = "RED";
print "$input is $color{fc($input)}\n";
We use fc to normalize hash keys and lookups. This ensures
case-insensitive access to the hash values.
$ ./hash.pl RED is #FF0000
Performance Considerations
Case folding operations can be expensive for large texts.
#!/usr/bin/perl
use strict;
use warnings;
use v5.16.0;
use Benchmark qw(cmpthese);
my $text = "ÄÖÜäöüß" x 1000;
cmpthese(-1, {
fc => sub { my $x = fc($text) },
lc => sub { my $x = lc($text) },
});
This benchmark compares fc with lc performance.
Case folding is typically slower but more correct for Unicode text.
Best Practices
- Use for comparisons: Prefer fc over lc/uc for Unicode.
- Normalize early: Fold case when storing or first processing.
- Combine with NFC: Consider Unicode normalization if needed.
- Document usage: Note where case folding is applied.
Source
This tutorial covered Perl's fc function with practical
examples demonstrating its usage in Unicode string handling.
Author
List all Perl tutorials.