-1

正如您将在下面看到的那样,“eval”包含代码的标量是一种糟糕的 perl 做法。除此之外,在下面的代码中,条件 '$condition{'b'}{'1'}' 没有通过循环运行。只有在数组中最先出现的条件才会运行,即。条件'$condition{'a'}{'1'}',已运行。

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!
   }

}

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

4

1 回答 1

1

foreach (@parameter)循环运行它的主体for 'a'。在该循环中,foreach (<INPUT>)循环将输入消耗到其末端。

然后foreach (@parameter)循环运行它的主体 for 'b'。在那个循环中,foreach (<INPUT>)循环没有输入,因为它已经被消耗掉了。

于 2012-08-15T23:16:16.427 回答