当在Perl程序中用作文字时,数字的处理方式与C中相同:“0x”前缀表示十六进制,“0”前缀表示八进制,没有前缀表示十进制:
$ perl -E 'print 0x23 . "\n"'
35
$ perl -E 'print 023 . "\n"'
19
$ perl -E 'print 23 . "\n"'
23
我想使用相同的表示法将命令行参数传递给Perl。例如如果我传递23,我想将字符串参数转换为十进制值(23)。如果我传递0x23,我想转换为十六进制值(35),023将转换为八进制(19)。有没有内置的方法来处理这个?我知道hex()和oct(),但是他们将没有前缀的数字分别解释为十六进制/八进制(不是十进制)。遵循这个约定,似乎我想要一个dec()函数,但我认为不存在。
答案 0 :(得分:10)
来自http://answers.oreilly.com/topic/419-convert-binary-octal-and-hexidecimal-numbers-in-perl/:
print "Gimme an integer in decimal, binary, octal, or hex: ";
$num = <STDIN>;
chomp $num;
exit unless defined $num;
$num = oct($num) if $num =~ /^0/; # catches 077 0b10 0x20
printf "%d %#x %#o %#bn", ($num) x 4;