A função ord() em Perl

Na linguagem de programação Perl possui a função de ord(). Esta função retorna um número que corresponde à indicada símbolo.

Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

use utf8;
use feature qw(say);

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

Argumentos

Se a função ord() não passar nenhum argumento, a função funciona com дефолтной variável $_:

▶ Run
#!/usr/bin/perl

$_ = 'a';

print ord(); # 97

O padrão de uso da função é transmitir exatamente um símbolo. Neste caso, a função retornará o valor numérico desse símbolo. Se a função ord() passar a linha, que é composta por vários caracteres, a função retornará o valor numérico do primeiro caractere:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Se a função ord() de transmitir mais do que um argumento, então o erro será:

▶ 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.

No caso de se passar em ord() linha em branco, então a função retorna o número de 0:

▶ Run
#!/usr/bin/perl

print ord('');

Unicode

Aqui está um exemplo de um programa em que para o mesmo símbolo função ord() retorna valores diferentes:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say ord('Ъ');

use utf8;

say ord('Ъ');

O programa exibirá:

208
1066

A primeira chamada ord('Ъ') retorna o número 208. Isso ocorre devido ao fato de que ord() percebe o seu argumento não como um símbolo, como uma seqüência de caracteres de dois bytes 208 170 e retorna o número para o primeiro caractere a partir desta linha.

Mas depois de use utf8; perl acredita que o código do programa é escrito na codificação utf8 e ord() percebe o seu argumento não como uma seqüência de dois caracteres, e como uma seqüência de caracteres a partir de um único caractere. E retorna para ele o valor de 1066.

A documentação oficial

Aqui está a saída do comando 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.

Outros artigos