A função hex() em Perl

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

A função hex() converte um número de um formato hexadecimal em decimal.

Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

O programa exibirá 255.

Argumentos

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

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

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 = hex();
Use of uninitialized value $_ in hex at script.pl line 6.

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

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

Too many arguments for hex 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 @hex = ('0xA', '0xB', '0x11');

my @dec = map { hex } @hex;

warn Dumper \@dec;

Uma linha pode começar com 0x, mas não é necessário. A maiúsculas e minúsculas e os valores não tem.

Aqui estão alguns exemplos. Neste exemplo, todas as chamadas a funções de hex()retornam o mesmo valor — o número de 2748.

▶ Run
#!/usr/bin/perl

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

say hex('0xABC');
say hex('0XABC');
say hex('0xabc');
say hex('XABC');
say hex('xABC');
say hex('abc');
say hex('AbC');

A função não é capaz de trabalhar com fracionários hexadecimais. Quando você tenta converter é o número será emitido um aviso:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print hex('0x10.8');
Illegal hexadecimal digit '.' ignored at script.pl line 6.
16

O valor de retorno

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

A documentação oficial

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

    hex EXPR
    hex     Interprets EXPR as a hex string and returns the corresponding
            numeric value. If EXPR is omitted, uses $_.

                print hex '0xAf'; # prints '175'
                print hex 'aF';   # same
                $valid_input =~ /\A(?:0?[xX])?(?:_?[0-9a-fA-F])*\z/

            A hex string consists of hex digits and an optional "0x" or "x"
            prefix. Each hex digit may be preceded by a single underscore,
            which will be ignored. Any other character triggers a warning
            and causes the rest of the string to be ignored (even leading
            whitespace, unlike "oct"). Only integers can be represented, and
            integer overflow triggers a warning.

            To convert strings that might start with any of 0, "0x", or
            "0b", see "oct". To present something as hex, look into
            "printf", "sprintf", and "unpack".

Temas relacionados

Outros artigos