Это похоже на проблему PUP-6010 . Это было закрыто как "не будет делать", но комментарии дают объяснение и обходной путь.
Вкратце, Puppet использует точно такие же правила для преобразования числовых строк в числа, которые он использует для преобразования числовых литералов, и они включают в себя то, что ведущий 0x
направляет интерпретацию как шестнадцатеричное, а в противном случае ведущий 0
направляет интерпретацию как восьмеричное. Некоторые другие языки, такие как Ruby и C, имеют такое же соглашение. Но '8' и '9' не являются действительными восьмеричными цифрами, поэтому строки '08'
и '09'
не могут быть напрямую преобразованы в целые числа с помощью арифметических операторов или конструктора Integer()
.
Рекомендуемое решение - использовать функцию scanf
для преобразования ваших строк:
$minute_integer = $minute_string.scanf('%d')[0]
При таком формате все цифры будут интерпретироваться как десятичные, а начальные нули не имеют особого значения. Функция возвращает массив, из которого [0]
, конечно, выбирает элемент с индексом 0.