2012-08-15 111 views
-1

正如您在下面看到的,是一个错误的'eval'实践,它是一个包含代码的标量。除此之外,在下面的代码中,条件'$ condition {'b'} {'1'}'没有在循环中运行。只有数组中第一个出现的条件才会运行,即。条件'$ condition {'a'} {'1'}',运行。通过循环遍历一个数组形成多个if语句

my @parameter=('a','b'); 

my %condition; 
$condition{'a'}{'1'}='$degree>=5'; 
$condition{'b'}{'1'}='$number>5'; 

foreach (@parameter) { 
    my $count=0; 

    foreach (<INPUT>) { 
    my $degree=....; #$degree defined 
    my $number=.....; #$number defined 
    if (eval $condition{$_}{'1'}) {$count++} #only $condition{'a'}{'1'} was run! 
    } 

} 

第一个问题是为什么第一个条件卡在循环中,第二个问题是我该如何解决它?非常感谢任何帮助/建议/解决方案。 :)

+0

答案主要取决于“..”是什么。 – Sean 2012-08-15 22:23:11

+1

这个问题给人的印象是在http://stackoverflow.com/q/11976045/716443的所有答案之后没有任何进展。但是,您应该测试'$ @'来查看'eval'是否产生错误。否则,你的问题存在于{{}}内包含的不可见代码中。然后返回并使用不需要评估字符串作为代码的解决方案之一。 – DavidO 2012-08-15 22:26:02

+0

stackoverflow.com/q/11976045/716443确实有助于获取数组中第一个元素的工作条件,但之后就陷入了困境。 – bioinformant 2012-08-15 22:41:20

回答

1

foreach (@parameter)循环运行它的身体为'a'。在该循环中,foreach (<INPUT>)循环将消耗输入至其末尾。

foreach (@parameter)循环然后运行它的身体'b'。在该循环中,foreach (<INPUT>)循环没有输入,因为它已被使用。

+0

非常感谢。问题理解和解决。 – bioinformant 2012-08-16 00:36:39