这是我的测试用例。
在版本3.10.0.0之前可以使用的cmd_1在以后的版本中将不起作用。Cmd_2在3.10.1.0中引入,将是以后的有效替换。
我需要为上述情况添加一个条件。对于3.10.1.0之前的旧版本,必须执行cmd_1,而对于3.10.1.0及更高版本,则必须执行cmd_2。
我尝试如下:
if ( ( $version =~ /^3\.10\.[1-9]/ ) || ( $version =~ /^3\.[1-9][0-9]/ ) || ( $version =~ /^[4-9]/ ) {
# execute cmd_2;
}else{
# execute cmd_1;
}
Run Code Online (Sandbox Code Playgroud)
上述正则表达式在某些情况下会失败。例如,在version = 3.10.0.0的情况下,将执行cmd_2,这是无效的。
Cmd_2必须在以下版本中执行:
3.10.1.0,3.10.2.0,3.11.0.0,3.11.2.0,3.20.0.0,4.0.0.0,5.0.0.0,10.0.0.0
Cmd_1必须在以下版本中执行:
3.10.0.0,3.9.0.0,3.1.0.0,3.0.0.0,2.0.0.0,1.0.0.0
我尝试了一些正则表达式,但找不到理想的正则表达式。请帮我解决一下这个。
提前致谢。
我将Perl数据结构传递给encode_json,并使用其返回值作为输入来发布到restful API.
例:
$data = (input1 => true);
$json_data = encode_json($data);
print $json_data; // Prints: ["input1":"true"]
$url= http://api.example.com/resources/getDataAPI
$headers = {Accept => 'application/json', Authorization => 'Basic ' . encode_base64($username . ':' . $password)};
$client = REST::Client->new();
$client->POST($url,($json_data,$headers));
Run Code Online (Sandbox Code Playgroud)
这一切都很好.
最近,另一个开发人员进行了很少的输入参数验证检查,REST严格接受布尔值,没有引号.
我现在需要发送我的输入
$data = '["inout1":true]'
$client = REST::Client->new();
$client->POST($url,($data,$headers));
Run Code Online (Sandbox Code Playgroud)
我的所有脚本都失败了,因为输入数据使用encode_json函数编码为JSON格式.
我可以手动形成JSON数据,但输入数据有时会非常庞大.无法识别它们并随时修改.
有没有办法可以实现没有引号的传递布尔值?