将 EXPR 解释为八进制字符串并返回相应的值。八进制字符串由八进制数字组成,从 Perl 5.33.5 开始,还可以选择添加 0o
或 o
前缀。每个八进制数字前面都可以添加一个下划线,该下划线将被忽略。(如果 EXPR 恰好以 0x
或 x
开头,则将其解释为十六进制字符串。如果 EXPR 以 0b
或 b
开头,则将其解释为二进制字符串。在这三种情况下,都将忽略前导空格。)以下内容将以标准 Perl 符号处理十进制、二进制、八进制和十六进制
$val = oct($val) if $val =~ /^0/;
如果省略 EXPR,则使用 $_
。要反向进行(生成八进制数字),请使用 sprintf
或 printf
my $dec_perms = (stat("filename"))[2] & 07777;
my $oct_perm_str = sprintf "%o", $perms;
oct
函数通常在需要将字符串(例如 644
)转换为文件模式时使用。虽然 Perl 会根据需要自动将字符串转换为数字,但此自动转换假定为基数 10。
前导空格将被忽略,不会发出警告,任何尾随非数字(例如小数点)也会被忽略(oct
仅处理非负整数,不处理负整数或浮点数)。