Funkcja ord() w Perl

W języku programowania Perl jest wbudowana funkcja ord(). Funkcja ta zwraca liczbę, która spełnia podany znak.

Oto przykład:

▶ Run
#!/usr/bin/perl

use utf8;
use feature qw(say);

say ord('A'); # 65
say ord('1'); # 49
say ord('Ж'); # 1046

Argumenty

Jeśli funkcje ord() nie przekazać żadne argumenty, to funkcja działa z дефолтной zmiennej $_:

▶ Run
#!/usr/bin/perl

$_ = 'a';

print ord(); # 97

Standardowe korzystanie z funkcji to przekazać jej dokładnie jeden znak. W tym przypadku funkcja zwróci wartość liczbowa tego znaku. Jeśli funkcje ord() wyślij wiersz, który składa się z wielu znaków, funkcja zwróci wartość liczbowa pierwszego znaku:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say ord('a'); # 97
say ord('abcdef'); # 97

Jeśli funkcje ord() przekazać więcej niż jeden argument, to będzie błąd:

▶ Run
#!/usr/bin/perl

print ord('a', 'b', 'c');
Too many arguments for ord at script.pl line 3, near "'c')"
Execution of script.pl aborted due to compilation errors.

W przypadku, gdy przekazać w ord() pusty wiersz, to funkcja zwraca liczbę 0:

▶ Run
#!/usr/bin/perl

print ord('');

Unicode

Oto przykład programu, w którym do jednego i tego samego symbolu funkcja ord() zwraca różne wartości:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say ord('Ъ');

use utf8;

say ord('Ъ');

Program wyświetli na ekranie:

208
1066

Pierwsze połączenie ord('Ъ') zwraca liczbę 208. Dzieje się tak z powodu tego, że ord() postrzega swój argument nie jak jeden znak, a jak wiersz z dwóch bajtów 208 170 i zwraca numer pierwszego znaku z tej linii.

Ale po use utf8; perl uważa, że kod programu napisany w formacie utf8 i ord() postrzega swój argument nie jako wiersz z dwóch znaków, a jak wiersz z jednego znaku. I zwraca wartość 1066.

Oficjalna dokumentacja

Oto wynik polecenia perldoc -f ord:

    ord EXPR
    ord     Returns the numeric value of the first character of EXPR. If
            EXPR is an empty string, returns 0. If EXPR is omitted, uses $_.
            (Note *character*, not byte.)

            For the reverse, see "chr". See perlunicode for more about
            Unicode.

Inne artykuły