van függvény is_upper a Perl-ben, tehát hogyan ellenőrizhetjük, hogy egy karakterlánc csak nagybetűket tartalmaz-e?
az egyszerű dolog az, hogy összehasonlítsuk önmagának nagybetűs változatával:
if ($str eq uc $str) { print "All the characters are upper case\n";}
de ez azt is mondja, hogy “123” mindannyian nagybetűket használunk.
néha ez nem az, amire szüksége van.
legalább egy nagybetűs
amellett,hogy ellenőrizzük, hogy a karakterlánc nagybetűs változata megegyezik-e önmagával, érdemes megbizonyosodnunk arról, hogy van-e legalább egy nagybetűs betű.Használhatunk regexet:
if ($str =~ //) { print "There is an upper case letter\n";}
Ez működni fog a Latin ABC-vel, de nem egyezik meg a magyar ABC-ből származó olyan karakterekkel,mint pl. a magyar ABC-ből származó, a magyar ABC-ből származó, vagy más furcsa karakterekkel, mint például az umlaut (a nagybetűs változat).
legalább egy nagybetűs Unicode betű
ehhez van \p{nagybetűs}, amely pontosan megfelel egy felső caseUnicode karakternek. Így fog egyezni minden ilyen:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
Minden karakter nagybetűs Unicode betűk
lehet, Hogy nem elég, hogy van egy felső esetben a levelet.Lehet, hogy mindegyikre szükség van:ebben az esetben használhatjuk a ^ és a $ regex horgonyokat, hogy megfeleljenek a karakterlánc kezdetének és végének.
a + kvantort is alkalmazzuk, ami azt jelenti, hogy 1 vagy több az előző dolog. Esetünkben az előző nagybetűs karakter közül egy vagy több.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
az összes karakter nagybetűs Unicode betű vagy szóköz
természetesen ritka, hogy egy karakterlánc csak nagybetűk.néha azt is szeretnénk, hogy más karakterek. Például szeretnénk engedélyezni a tereket is. Ebben az esetben létrehozunk egy karakterosztályt (szögletes zárójelben), amely egy szóközből épül fel, és a világ összes nagybetűjét képviselő karakterosztályt: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
A példák kipróbálása
a példa kipróbálása során akár a file.In ebben az esetben valószínűleg szeretnénknyissa meg a fájlt az UTF-8 zászló használatával:
open(my $fh, '<:encoding(UTF-8)', $filename)
másrészt, ha az összehasonlítandó karakterláncok a kódban vannak,hozzá kell adni az UTF8; használatát a szkript elejéhez.
mindkét esetben javasolt az UTF-8 szabványos kimeneti csatornáinak módosítása a következőkkel:
use open ':std', ':encoding(utf8)';
próbáld ki ezt a példát:
use strict;use warnings;use 5.010;use utf8;use open ':std', ':encoding(utf8)';foreach my $str ("1", "ä", "äÄ", " Ä", "X", "Á", "É", "Í", "Ö", "Ő", "Ú", "Ü") { if ($str =~ /^+$/) { say $str; } else { say "no $str"; }}