Funktion oct() i Perl

I programmeringssproget Perl har en indbygget funktion oct().

Funktion oct() konverterer et tal fra oktale tal systemet til decimal. Men selv med denne funktion kan konvertere et tal i decimal-nummer og fra binære og hexadecimale.

Her er et eksempel:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Argumenter

Hvis funktionen oct ikke gives ingen argumenter, den fungerer med standard variable $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

I dette tilfælde, hvis den variable $_ er undef og anvendes use warnings;, vil advarsel:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Standard hjælp oct() er at give det et enkelt argument.

Hvis overførslen funktion oct() mere end ét argument, vil det være en fejl og kode vil blive stoppet.

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

Hvis du har brug for at konvertere flere værdier, kan du bruge map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { oct } @oct;

warn Dumper \@dec;

Hvis funktionen er bestået en streng, der begynder med 0x eller 0X, funktion oct() fortolker denne streng som et tal i hexadecimal notation, og vender tilbage dette tal er i decimal.

Men hvis strengen starter med 0b eller OB, så ord() mener, at den linje nummer i binær notation og returnerer dens decimal repræsentation.

Hvis i oct() pass nummer, hvor der er et tegn, der ikke er indgår i den række af numre fra 0 til 7, derefter oct() vil vende tilbage 0, men i prisen use warnings; vil advarsel:

▶ 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

Funktion oct() ikke kan arbejde med fraktioneret værdier:

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

Return værdi

Funktion oct() altid returnerer et tal.

Officiel dokumentation

Her er outputtet af kommandoen 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).

Relaterede emner

Andre artikler