A função oct() em Perl

Na linguagem de programação Perl possui a função de oct().

A função oct() converte um número octal sistema de numeração em десятеричную. Mas esta função é capaz de converter um número em десятеричную sistema numérico e a partir do binário e hexadecimal.

Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say oct('10'); # 8
say oct('0x10'); # 16
say oct('0b10'); # 2

Argumentos

No caso de uma função oct não passar nenhum argumento, a função funciona com дефолтной variável $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

No caso de a variável $_ está undef e é usado use warnings;, então vai um aviso:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $dec = oct();
Use of uninitialized value $_ in oct at script.pl line 6.

O padrão de uso da função oct() é passar um argumento.

Se passar uma função oct() de mais de um argumento, o erro e a execução de código é interrompido.

Too many arguments for oct at script.pl line 3, near "2)"
Execution of script.pl aborted due to compilation errors.

Se precisar de converter vários valores, você pode usar map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @oct = (100, 200, 300);

my @dec = map { oct } @oct;

warn Dumper \@dec;

Se a função transferida para a linha que começa com 0x ou 0X, então a função de oct() percebe essa linha como um número em notação hexadecimal e retorna é um número no sistema decimal.

E se uma linha começa com 0b ou OB, o ord() considera esta linha de número no sistema binário de numeração e também retorna-lo десятеричное desempenho.

No caso em oct() enviar um número em que há um símbolo que não a um intervalo de números de 0 até 7, o oct() retornará 0, mas quando incluídos use warnings; vai um aviso:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

say oct(90210);
Illegal octal digit '9' ignored at script.pl line 7.
0

A função oct() não é capaz de trabalhar com valores fracionários:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

say oct('10.7');
say oct('0X10.F');
say oct('0B10.11');
8
16
2
Illegal hexadecimal digit '.' ignored at script.pl line 8.
Illegal binary digit '.' ignored at script.pl line 9.

O valor de retorno

A função oct() sempre retorna o número.

A documentação oficial

Aqui está a saída do comando perldoc -f oct:

    oct EXPR
    oct     Interprets EXPR as an octal string and returns the corresponding
            value. (If EXPR happens to start off with "0x", interprets it as
            a hex string. If EXPR starts off with "0b", it is interpreted as
            a binary string. Leading whitespace is ignored in all three
            cases.) The following will handle decimal, binary, octal, and
            hex in standard Perl notation:

                $val = oct($val) if $val =~ /^0/;

            If EXPR is omitted, uses $_. To go the other way (produce a
            number in octal), use "sprintf" or "printf":

                my $dec_perms = (stat("filename"))[2] & 07777;
                my $oct_perm_str = sprintf "%o", $perms;

            The "oct" function is commonly used when a string such as 644
            needs to be converted into a file mode, for example. Although
            Perl automatically converts strings into numbers as needed, this
            automatic conversion assumes base 10.

            Leading white space is ignored without warning, as too are any
            trailing non-digits, such as a decimal point ("oct" only handles
            non-negative integers, not negative integers or floating point).

Temas relacionados

Outros artigos