Funkcja oct() w Perl

W języku programowania Perl jest wbudowana funkcja oct().

Funkcja oct() konwertuje liczbę z ósemkowy system liczbowy w десятеричную. Ale ta funkcja jest w stanie konwertować liczby w десятеричную system liczbowy i z dwójkowym i szesnastkowym.

Oto przykład:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Argumenty

W przypadku, gdy funkcje oct nie zostały przekazane żadne argumenty, to funkcja działa z дефолтной zmiennej $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

W przypadku, gdy w zmiennej $_ jest undef i jest używany use warnings;, to będzie ostrzeżenie:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Standardowe korzystanie z funkcji oct() — to jej podać jeden argument.

Jeśli przekazać funkcji oct() więcej niż jeden argument, to będzie błąd i wykonywanie kodu zostanie zatrzymane.

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

Jeśli chcesz przekonwertować wiele wartości, to można użyć map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { oct } @oct;

warn Dumper \@dec;

Jeśli w funkcji przekazywane wiersz, który zaczyna się od 0x lub 0X, to funkcja oct() postrzega ten wiersz jako liczba w systemie szesnastkowym i zwraca jest to liczba w systemie dziesiętnym.

A jeśli wiersz zaczyna się od 0b lub OB, to ord() uważa ten wiersz liczbą w systemie dwójkowym i również zwraca jego десятеричное widok.

W przypadku, gdy w oct() przekazać liczba w którym znajduje się symbol, który nie wchodzi w zakres cyfr od 0 do 7, to oct() zwróci 0, ale przy włączonych use warnings; będzie ostrzeżenie:

▶ 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

Funkcja oct() nie jest w stanie pracować z ułamków wartościami:

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

Wartość zwracana

Funkcja oct() zawsze zwraca liczbę.

Oficjalna dokumentacja

Oto wynik polecenia 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).

Tematy pokrewne

Inne artykuły