Fungsi oct() di Perl

Dalam bahasa pemrograman Perl memiliki fungsi built-in oct().

Fungsi oct() mengkonversi bilangan dari oktal sistem bilangan desimal. Tetapi bahkan fungsi ini dapat mengkonversi angka dalam sistem bilangan desimal dan dari biner dan heksadesimal.

Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

use feature qw(say);

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

Argumen

Jika fungsi oct tidak diberikan tidak ada argumen, fungsi bekerja dengan default variabel $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

print oct(); # 83

Dalam hal ini jika variabel $_ adalah undef dan digunakan use warnings;, akan peringatan:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Standar menggunakan oct() adalah untuk lulus satu argumen.

Jika fungsi transfer oct() lebih dari satu argumen, itu akan menjadi sebuah kesalahan dan kode eksekusi akan dihentikan.

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

Jika anda perlu untuk mengubah beberapa nilai-nilai, anda dapat menggunakan map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { oct } @oct;

warn Dumper \@dec;

Jika fungsi melewati sebuah string yang dimulai dengan 0x atau 0X, fungsi oct() menafsirkan string ini sebagai angka dalam notasi heksadesimal dan kembali jumlah ini dalam desimal.

Tapi jika string dimulai dengan 0b atau OB, maka ord() menganggap nomor baris dalam notasi biner dan mengembalikan representasi desimal.

Jika di oct() lewat nomor di mana ada karakter yang tidak termasuk dalam kisaran angka dari 0 untuk 7, kemudian oct() akan kembali 0, tapi termasuk use warnings; akan peringatan:

▶ 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

Fungsi oct() tidak dapat bekerja dengan pecahan nilai-nilai:

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

Nilai kembali

Fungsi oct() selalu mengembalikan jumlah.

Dokumentasi resmi

Berikut ini adalah output dari perintah 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).

Topik terkait

Artikel lainnya