Der er funktion is_upper i Perl, så hvordan kan vi kontrollere, om en streng indeholderkun store bogstaver?
den enkle ting er at sammenligne den med den store version af sig selv:
if ($str eq uc $str) { print "All the characters are upper case\n";}
men dette vil også sige, at “123” os alle store bogstaver.
Nogle gange er det ikke det, du har brug for.
mindst et stort bogstav
ud over at kontrollere,om den store version af strengen er lig med sig selv, vil vi måske sikre os, at der er mindst et stort bogstav.Vi kan bruge en regeks:
if ($str =~ //) { print "There is an upper case letter\n";}
Dette fungerer med den latinske ABC, men matcher ikke tegn som f.eks.
mindst et stort Unicode-bogstav
For det er der \p{store bogstaver}, der matcher nøjagtigt et øvre caseUnicode-tegn. Så det vil matche enhver af disse:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
Alle de tegn, der er øverste tilfælde Unicode bogstaver
Det kan ikke være nok at have et stort bogstav.Du kan kræve at have dem alle:i så fald kan vi bruge ^ og $ regeks ankeretfor at matche henholdsvis begyndelsen og slutningen af strengen.
Vi anvender også + kvantificereren, der betyder 1 eller flere afforudgående ting. I vores tilfælde en eller flere af de foregående store bogstaver.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
alle tegn er store bogstaver Unicode bogstaver eller mellemrum
det er selvfølgelig sjældent, at en streng kun vil bestå af store bogstaver.engang vil vi også tillade andre tegn. For eksempel vil vi også gerne tilladeområder. I dette tilfælde opretter vi en karakterklasse (i firkantede parenteser), der er opbygget fra et mellemrum og karakterklassen, der repræsenterer alle store bogstaver i verden: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
forsøger eksemplerne
når vi prøver eksemplet, kan vi enten læse strengene fra a file.In i den sag vil vi sandsynligvis ønske atåbn filen ved hjælp af UTF-8 flag aktiveret:
open(my $fh, '<:encoding(UTF-8)', $filename)
På den anden side, hvis strengene,der skal sammenlignes, er i koden, skal man tilføje brug utf8; til begyndelsen af scriptet.
i begge tilfælde anbefales det at ændre standardudgangskanalerneat bruge utf-8 med følgende:
use open ':std', ':encoding(utf8)';
prøv dette eksempel:
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"; }}