如何在Puppet中将字符串转换为整数

时间:2019-03-18 21:17:27

标签: puppet

我正在尝试将基于时间(小时和分钟)的字符串转换为人偶中的整数。 除分钟数少于10(例如08)外,大多数时间都可以正常工作。对于这些值,它会引发异常。

Error: Evaluation Error: The value '08' cannot be converted to Numeric. 

使用的代码

$minute_string = Timestamp.new.strftime("%M")
#Tried the following and it did not work
#$minute_integer = $minute_string + 0
#Subsequently, attempted the following but it did not work either
$minute_integer = Integer($minute_string)

2 个答案:

答案 0 :(得分:4)

这看起来像问题PUP-6010。由于“不会做”而被关闭,但是这些评论提供了解释和解决方法。

简而言之,Puppet使用完全相同的规则将数字字符串转换为用于转换数字文字的数字,其中包括前导0x指示解释为十六进制,否则前导{{1} }将解释指示为八进制。其他一些语言(例如Ruby和C)具有相同的约定。但是'8'和'9'不是有效的八进制数字,因此字符串0'08'不能由算术运算符或'09'构造函数直接转换为整数。

推荐的解决方案是使用Integer()函数来转换字符串:

scanf

采用这种格式时,所有数字都将被解释为十进制,并且前导零没有特殊意义。该函数返回一个数组,其中$minute_integer = $minute_string.scanf('%d')[0] 当然会选择索引0处的元素。

答案 1 :(得分:2)

一种解决方法是添加-,它不会用零填充。但是要检查一下约翰的解决方案是否行得通。

$minute_string = Timestamp.new.strftime("%-M") ; notice("Current minute : $minute_string")

接受约翰的回答