【问题标题】:Appending number to a variable name in a loop in perl在perl的循环中将数字附加到变量名
【发布时间】:2017-04-12 16:43:56
【问题描述】:

我正在编写用于检查 C 代码的 perl 测试用例。这里我多次调用C文件 具有不同的值并检查它是否返回 1。 我的 perl 文件看起来像这样:

my $variableCheck1,$variableCheck2,$variableCheck3.....
.
.
.
.
if(($variableCheck1 == 1) && ($variableCheck2 == 1) && ($variableCheck3 == 1).....)
{
   print "Test cases are passed";
}

问题是有很多检查变量。 有没有办法让我可以在循环中运行所有检查变量,同时将数字附加到检查变量中

for($i=1 ; $i < 12 ; $i++)
{
      if($variableCheck_$i   == 1)  
    {
    print "Test cases are passed";

    }
}

附加使得每个循环变量名称根据值 $i 更改:variableCheck1,variableCheck2。

【问题讨论】:

标签: perl loops


【解决方案1】:

最好使用实际的测试库,例如Test::More,它可以让您知道所有测试是否通过,并提供许多有用的测试功能。然后,只需迭代各种参数值并运行测试就非常简单了。这是一个示例,它将各种参数传递给 echo 命令,然后将结果通过管道传递给计算器程序 bc 以查看加法是否正确:

test_add.t

#!/usr/bin/env perl

use warnings;
use strict;
use Test::More;
for my $aa ( 1..3 ) {
    for my $bb ( 1..3 ) {
        my $expected = $aa + $bb;
        my $prog = "echo $aa + $bb | bc";
        my $output = `$prog`;
        ok( $expected == $output, "$aa + $bb = $expected" );
    }
}
done_testing();

运行测试文件:

prove -v test_add.t
ok 1 - 1 + 1 = 2
ok 2 - 1 + 2 = 3
ok 3 - 1 + 3 = 4
ok 4 - 2 + 1 = 3
ok 5 - 2 + 2 = 4
ok 6 - 2 + 3 = 5
ok 7 - 3 + 1 = 4
ok 8 - 3 + 2 = 5
ok 9 - 3 + 3 = 6
1..9
ok
ll tests successful.
Files=1, Tests=9,  0 wallclock secs ( 0.05 usr  0.01 sys +  0.04 cusr  0.00 csys =  0.10 CPU)
Result: PASS

【讨论】:

    【解决方案2】:

    每当您使用一长串编号变量时,该工作的工具不是来动态计算变量名称 - 这称为符号引用,它很讨厌。

    您应该做的是使用变量列表。

    my @variablecheck = ( 1, 2, 1, 3, ); 
    
    foreach my $value ( @variablecheck ) { 
        print "Test passed\n" if $value == 1;
    }
    

    如果您真的对符号命名进行了设置 - read this 在继续之前 - 这是从 1998 年开始的,但它仍然是个坏主意。您可以将哈希用于类似目的 - 如果您有任意名称,它们很好 - 但对于顺序数值,数组是这项工作的工具。

    使用测试库也是如此,例如 TAP::HarnessTest::More

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多