Функция hex() в Perl

В языке программирования Perl есть встроенная функция hex().

Функция hex() преобразует число из шестнадцатеричного формата в десятеричный.

Вот пример:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

Программа выведет на экран 255.

Аргументы

В том случае если функции hex не переданы никакие аргументы, то функция работает с дефолтной переменной $_:

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

В том случае если в переменной $_ находится undef и используется use warnings;, то будет предупреждение:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Стандартное использование функции hex() — это передать ей один аргумент.

Если передать функции hex() больше чем один аргумент, то будет ошибка и выполнение кода будет остановлено.

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

Если необходимо преобразовать несколько значений, то можно использовать map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @hex = ('0xA', '0xB', '0x11');

my @dec = map { hex } @hex;

warn Dumper \@dec;

Строка может начинаться с 0x, но это не обязательно. Регистр символов значения не имеет.

Вот несколько примеров. В это примере все обращения к функции hex() возвращают одно и то же значение — число 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');

Функция не умеет работать с дробными шестнадцатеричными числами. При попытке преобразовать такое число будет предупреждение:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Возвращаемое значение

Функция hex() всегда возвращает число.

Официальная документация

Вот вывод команды 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".

Связанные темы

Другие статьи