好吧,作为序言,这个问题可能比我正常的问题更"愚蠢" - 但是这个问题在过去的几天一直让我讨厌,所以无论如何我都会问它.我将举例说明我的问题是什么,所以我希望将其概括为我当前的问题.
#!/usr/bin/perl -w use strict;
use Test::More 'no_plan';
my $fruit_string = 'Apples cost $1.50';
my ($fruit, $price) = $fruit_string =~ /(\w+)s cost \$(\d+\.\d+)/;
# $price += 0; # Uncomment for Great Success
is ($price, 1.50, 'Great Success');
Run Code Online (Sandbox Code Playgroud)
现在,当这个运行时,我得到了消息
# Failed test 'Great Success'
# got: '1.50'
# expected: '1.5'
Run Code Online (Sandbox Code Playgroud)
为了使测试工作 - 我要么取消注释注释行,要么使用is ($price, '1.50', 'Great Success').这两个选项对我都不起作用 - 我正在使用Test :: Deep和cmp_deeply测试大量嵌套数据.我的问题是,如何从正则表达式中提取双精度然后立即将它作为双精度使用 - 或者如果有更好的方法让我知道 - 并随意告诉我从事园艺或其他事情,学习Perl是硬.
Eth*_*her 10
您已经在使用Test :: Deep,因此您可以简单地使用num()包装器来执行数字而不是逐字符串比较(它甚至允许您添加公差,以比较两个不精确的浮点值):
cmp_deeply(
$result,
{
foo => 'foo',
bar => 'blah',
quantity => 3,
price => num(1.5),
},
'result hash is correct',
);
Run Code Online (Sandbox Code Playgroud)
对于单独进行的正常比较,cmp_ok将起作用,但num()仍然可用:cmp_deeply($value, num(1.5), 'test name')仍然有效.
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |