Fonction oct() en Perl

Dans le langage de programmation Perl, il ya une fonction intégrée oct().

La fonction de oct() convertit un nombre de systèmes de numération octal en десятеричную. Mais encore cette fonction est capable de convertir des nombres en десятеричную le système de numération et de binaire et hexadécimal.

Voici un exemple:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Les arguments

Dans ce cas, si la fonction oct n'est pas transmises à aucun argument, la fonction travaille avec дефолтной variable $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

Dans ce cas si la variable $_ est undef et utilisé use warnings;, ce sera un avertissement:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

L'utilisation standard de la fonction oct() — c'est de lui transmettre un argument.

Si vous passez de la fonction oct() a plus d'un argument, ce serait une erreur et l'exécution de code sera arrêté.

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

Si vous voulez convertir plusieurs valeurs, vous pouvez utiliser map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { oct } @oct;

warn Dumper \@dec;

Si la fonction est transmise par une chaîne qui commence avec 0x ou 0X, alors la fonction oct() perçoit cette ligne comme un nombre dans le système hexadécimal et renvoie c'est un nombre décimal.

Et si la chaîne commence par 0b ou OB, ce ord() considère cette ligne nombre dans le système binaire et renvoie également à son десятеричное vue.

Dans ce cas si oct() transmettre un nombre qui est un symbole, qui n'est pas est inclus dans la gamme des chiffres de 0 à 7, ce oct() renverra 0, mais inclus use warnings; sera un avertissement:

▶ 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 fonction oct() n'est pas capable de travailler avec des fractions valeurs:

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

La valeur de retour

La fonction oct() renvoie toujours un nombre.

La documentation officielle

Voici la sortie de la commande 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).

Thèmes connexes

Autres articles