istnieje funkcja is_upper w Perlu, więc jak możemy sprawdzić, czy łańcuch zawiera tylko wielkie litery?
najprostszą rzeczą jest porównanie go z samą wielkimi literami:
if ($str eq uc $str) { print "All the characters are upper case\n";}
ale to również powie, że „123” nas wszystkich wielkimi literami.
czasami to nie jest to, czego potrzebujesz.
co najmniej jedna wielka litera
oprócz sprawdzania,czy Wielka wersja łańcucha jest równa sobie, możemy chcieć upewnić się, że istnieje co najmniej jedna wielka litera.Możemy użyć wyrażenia regularnego:
if ($str =~ //) { print "There is an upper case letter\n";}
To będzie działać z łacińskim ABC, ale nie będzie pasować do znaków jak áéíóöőúüű (wielkie litery áéíóöőúüű) z węgierskiego ABC,ani innych dziwnych znaków jak Umlaut Ä (wielkie litery ä).
co najmniej jedna wielka litera Unicode
do tego istnieje \p{Wielkie Litery}, która będzie pasować dokładnie do jednego górnego znaku caseUnicode. Tak więc będzie pasować do każdego z nich:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
wszystkie znaki są wielkimi literami Unicode
może nie wystarczyć jedna wielka litera.Możesz wymagać, aby mieć wszystkie z nich:w takim przypadku możemy użyć kotwic regularnych ^ i$, aby dopasować odpowiednio początek i koniec łańcucha.
stosujemy również kwantyfikator+, który oznacza 1 lub więcej rzeczy. W naszym przypadku jeden lub więcej z poprzedzających wielkich liter.
wszystkie znaki są wielkimi literami Unicode lub spacjami
oczywiście rzadko zdarza się, że łańcuch składa się tylko z wielkich liter.czasami chcemy również zezwolić na inne znaki. Na przykład chcielibyśmy zezwalać również na przestrzenie. W tym przypadku tworzymy klasę znaków (w nawiasach kwadratowych)zbudowaną ze spacji oraz klasę znaków reprezentującą wszystkie wielkie litery na świecie: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
wypróbowanie przykładów
podczas próby przykładu możemy odczytać Ciągi z file.In w takim przypadku prawdopodobnie będziemy chcieli otworzyć plik używając włączonej flagi UTF-8:
open(my $fh, '<:encoding(UTF-8)', $filename)
z drugiej strony, jeśli ciągi,które mają być porównane, są w kodzie, należy dodać use utf8; na początku skryptu.
w obu przypadkach zaleca się zmianę standardowego kanału wyjściowego, aby używać utf-8 za pomocą następującego polecenia:
use open ':std', ':encoding(utf8)';
wypróbuj ten przykład:
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"; }}