【问题标题】:Handle command line arguments with different radices in Perl在 Perl 中处理具有不同基数的命令行参数
【发布时间】:2013-06-04 05:34:32
【问题描述】:

当在 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(),但它们将没有前缀的数字分别解释为 hex/oct(不是十进制)。按照这个约定,我似乎想要一个 dec() 函数,但我认为它不存在。

【问题讨论】:

    标签: perl command-line-arguments hex


    【解决方案1】:

    来自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;
    

    【讨论】:

    • 不知道oct() 也可以转换十六进制和二进制;从名字上看不出来
    • 我也没有 - 知道的好技巧。 perlfunc 总是有新的东西要学习。 +1。
    • oct() 单行是完美的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 2015-05-01
    • 1970-01-01
    • 2020-12-08
    • 2020-01-23
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多