在perl的循环中将数字附加到变量名称

时间:2017-04-12 04:29:30

标签: perl loops

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

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

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

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

    }
}

追加为每个循环变量名称根据值$ i变化:variableCheck1,variableCheck2。

2 个答案:

答案 0 :(得分:5)

最好使用一个实际的测试库,例如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

答案 1 :(得分:3)

每次使用一长串编号变量时,该作业的工具都不是而不是来动态计算变量名称 - 这称为符号引用,它是&#39令人讨厌的

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

my @variablecheck = ( 1, 2, 1, 3, ); 

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

如果你真的开始使用符号命名 - read this再继续 - 它是从1998年开始的,但它仍然是一个坏主意。您可以将哈希用于类似目的 - 如果您拥有任意名称,它们会很好 - 但对于顺序数值,数组是作业的工具。

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