在Perl中处理具有不同半径的命令行参数

在Perl中处理具有不同半径的命令行参数,perl,command-line-arguments,hex,Perl,Command Line Arguments,Hex,在Perl程序中用作文本时,数字的处理方式与C中相同:“0x”前缀表示十六进制,“0”前缀表示八进制,而无前缀表示十进制: $ perl -E 'print 0x23 . "\n"' 35 $ perl -E 'print 023 . "\n"' 19 $ perl -E 'print 23 . "\n"' 23 我希望使用相同的符号将命令行参数传递给Perl。e、 g.如果我通过23,我想将字符串参数转换为十进制值(23)。如果我传递0x23,我想转换为十六进制值(35),023将转换为八进

在Perl程序中用作文本时,数字的处理方式与C中相同:“0x”前缀表示十六进制,“0”前缀表示八进制,而无前缀表示十进制:

$ perl -E 'print 0x23 . "\n"'
35
$ perl -E 'print 023 . "\n"'
19
$ perl -E 'print 23 . "\n"'
23
我希望使用相同的符号将命令行参数传递给Perl。e、 g.如果我通过23,我想将字符串参数转换为十进制值(23)。如果我传递0x23,我想转换为十六进制值(35),023将转换为八进制值(19)。有没有一种内在的方法来处理这个问题?我知道hex()和oct(),但它们将没有前缀的数字分别解释为hex/oct(不是十进制)。按照这个惯例,我似乎想要一个dec()函数,但我认为它不存在。

来自:

print“给我一个十进制、二进制、八进制或十六进制的整数:”;
$num=;
chomp$num;
除非定义了$num,否则退出;
$num=oct($num)如果$num=~/^0/;#捕捉077 0b10 0x20
printf“%d%#x%#o%#bn”,($num)x 4;

不知道
oct()
也可以转换十六进制和二进制;从名字上看不出来,我也看不出来——这是一个很好的诀窍。总是在
perlfunc
中学习一些新东西+1.oct()一号衬里非常完美。谢谢
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;