Interprets EXPR as an octal string and returns the corresponding value. An octal string consists of octal digits and, as of Perl 5.33.5, an optional 0o
or o
prefix. Each octal digit may be preceded by a single underscore, which will be ignored. (If EXPR happens to start off with 0x
or x
, interprets it as a hex string. If EXPR starts off with 0b
or b
, 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).