Преобразование в и из восьмеричного в Perl 6

Если у нас есть восьмеричное число, например. 0o157, Perl 6 может преобразовать его в десятичную:

> 0o157
111

Нам не разрешено удалять этот o в его восьмеричном представлении:

> 0157
Potential difficulties:
    Leading 0 has no meaning. If you meant to create an octal number, use '0o' prefix; like, '0o157'. If you meant to create a string, please add quotation marks.
    ------> 0157⏏<EOL>

Теперь сделаем обратное преобразование из десятичной в восьмеричное:

> printf "%#o\n", 111
0157

Возникает вопрос: почему нет o после 0 в восьмеричном представлении?

Между тем, если мы перейдем к шестнадцатеричному, будет x:

> printf "%#x\n", 111
0x6f

Ответ 1

Возникает вопрос: почему в восьмеричном представлении нет o после 0?

(s) printf является довольно универсальной функцией и портируется непосредственно на Perl 6. Она предназначена для совместимости с функциями других языков printf больше, чем с входным синтаксисом Perl 6.

Perl 5 printf ведет себя одинаково, поэтому его поведение, вероятно, было скопировано напрямую.