La función de oct() en Perl

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

La función de oct() convierte un número octal sistema de numeración en десятеричную. Pero aún esta función es capaz de convertir números en десятеричную el sistema de numeración y de binario y hexadecimal.

He aquí un ejemplo:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Los argumentos

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

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

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

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

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

Too many arguments for oct 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 @oct = (100, 200, 300);

my @dec = map { oct } @oct;

warn Dumper \@dec;

Si en la función de transmitir la línea que comienza con 0x o 0X, entonces la función de oct() percibe esa línea, como el número en hexadecimal y devuelve es el número en el sistema decimal.

Y si la cadena comienza con 0b o OB, lo ord() considera esta línea el número de en el sistema binario de numeración y también devuelve su десятеричное la vista.

En el caso de que en oct() enviar un número en el que hay un carácter que no entra en el rango de números de 0 hasta 7, lo oct() devolverá 0, pero cuando se use warnings; será una advertencia:

▶ 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

La función de oct() no sabe trabajar con valores fraccionarios:

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

El valor devuelto

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

La documentación oficial

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

Otros articulos