2013-06-07 3 views
4

При использовании в качестве литералов в программе Perl цифры обрабатываются так же, как в C: префикс «0x» означает шестнадцатеричный, префикс «0» означает восьмеричный, а префикс десятичный:Обработка аргументов командной строки с различными размерами в Perl

$ 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(), но я не думаю, что это существует.

ответ

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; 
+3

Не знал, что 'Октябре()' может преобразовать шестнадцатеричный и двоичный, а также; не смог бы сказать от имени – doubleDown

+1

И я тоже - хороший трюк. Всегда что-то новое, чтобы учиться в 'perlfunc'. +1. – friedo

+0

Oct() однострочный. Благодаря! – FazJaxton

Смежные вопросы