Perl oct 函数
最后修改于 2025 年 4 月 4 日
Perl 的 oct
函数将八进制、十六进制或二进制的数字字符串表示形式转换为十进制。它根据字符串的前缀来解释它们。
oct
将以 0
开头的字符串视为八进制,以 0x
开头的视为十六进制,以 0b
开头的视为二进制。如果没有前缀,它将输入视为八进制。
基本 oct 用法
使用 oct
的最简单方法是使用八进制字符串。
basic.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $octal = "0755"; my $decimal = oct($octal); print "Octal $octal is decimal $decimal\n";
我们将一个八进制字符串转换为其等效的十进制值。前导零向 Perl 表明是八进制表示法。
$ ./basic.pl Octal 0755 is decimal 493
十六进制转换
oct
可以转换以 0x
为前缀的十六进制字符串。
hex.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $hex = "0xFF"; my $decimal = oct($hex); print "Hexadecimal $hex is decimal $decimal\n";
此示例将十六进制颜色值转换为十进制。0x
前缀告诉 Perl 将其解释为十六进制。
$ ./hex.pl Hexadecimal 0xFF is decimal 255
二进制转换
以 0b
为前缀的二进制字符串可以使用 oct
进行转换。
binary.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $binary = "0b1010"; my $decimal = oct($binary); print "Binary $binary is decimal $decimal\n";
我们将二进制字符串转换为十进制。0b
前缀向 Perl 表明是二进制格式。
$ ./binary.pl Binary 0b1010 is decimal 10
无前缀处理
如果没有前缀,oct
会假定字符串是八进制格式。
noprefix.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $num = "755"; my $decimal = oct($num); print "String '$num' interpreted as octal: $decimal\n";
这演示了 oct
的默认八进制解释。没有前缀时,它将输入视为八进制数字。
$ ./noprefix.pl String '755' interpreted as octal: 493
文件权限
oct
通常用于转换文件权限字符串。
permissions.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $mode = "0644"; my $decimal = oct($mode); print "File mode $mode means decimal $decimal\n"; print "In binary: ", sprintf("%b", $decimal), "\n";
我们将一个常见的文件权限八进制字符串进行转换。结果以十进制和二进制格式显示实际的权限位。
$ ./permissions.pl File mode 0644 means decimal 420 In binary: 110100100
错误处理
字符串中的无效字符会导致 oct
停止解析。
error.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my $invalid = "0789"; my $decimal = oct($invalid); print "Invalid octal '$invalid' converted to: $decimal\n";
这演示了 oct
在处理无效八进制输入时的行为。它在遇到第一个无效字符(本例中为 8)时停止。
$ ./error.pl Invalid octal '0789' converted to: 7
列表上下文
oct
可用于列表操作进行批量转换。
list.pl
#!/usr/bin/perl use strict; use warnings; use v5.34.0; my @hex_values = ("0xFF", "0xAA", "0x10"); my @decimals = map { oct($_) } @hex_values; print "Converted values: @decimals\n";
我们使用 map
和 oct
来一次性将十六进制字符串数组转换为十进制数字。
$ ./list.pl Converted values: 255 170 16
最佳实践
- 始终验证输入:在转换字符串之前先进行检查。
- 使用显式前缀:明确表示基本解释。
- 考虑 hex()/bin():用于特定基本需求。
- 记录转换:注明预期的输入格式。
来源
本教程涵盖了 Perl 的 oct
函数,并通过实际示例演示了其在常见场景中的用法。
作者
列出 所有 Perl 教程。