La función de hex() en Perl

En el lenguaje de programación Perl tiene integrada la función de hex().

La función de hex() convierte un número en formato hexadecimal en десятеричный.

He aquí un ejemplo:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

El programa mostrará en pantalla 255.

Los argumentos

En caso de que la función de hex no se transfieren a ningún argumento, la función trabaja con дефолтной variable $_:

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

En el caso de que en la variable $_ se encuentra undef y utiliza la use warnings;, será una advertencia:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Uso estándar de la función de hex() es el de pasar un argumento.

Si para pasar a la función hex() más de un argumento, lo que se producirá un error y la ejecución del código se detiene.

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

Si desea convertir varios valores, se puede utilizar la map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { hex } @hex;

warn Dumper \@dec;

La línea puede comenzar con 0x, pero no es obligatorio. Entre mayúsculas y minúsculas no tiene.

He aquí algunos ejemplos. En este ejemplo, todos los accesos a las funciones de hex()devuelven el mismo valor — número 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');

La función no es capaz de trabajar con fraccionarios los números hexadecimales. Cuando intenta convertir esta el número será de advertencia:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

El valor devuelto

La función de hex() siempre devuelve el número.

La documentación oficial

He aquí el resultado del 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

Otros articulos