【问题标题】:Multiple if statements formed from looping through an array通过数组循环形成的多个 if 语句
【发布时间】:2012-08-15 22:07:53
【问题描述】:

正如您将在下面看到的那样,“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!
   }

}

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

【问题讨论】:

  • 答案主要取决于“..”是什么。
  • 这个问题给人的印象是在stackoverflow.com/q/11976045/716443 的所有答案之后没有取得任何进展但是,您可能应该测试$@ 以查看eval 是否产生错误。否则,您的问题存在于{..} 中包含的看不见的代码中。然后返回并使用不需要将字符串评估为代码的解决方案之一。
  • stackoverflow.com/q/11976045/716443 确实有助于使条件适用于数组中的第一个元素,但后来卡住了。
  • 试试这个:my $result = eval $condition{$_}{1}; die $@ if $@; if( $result ) { $count++ }。它不会神奇地解决问题,但可能会防止静默失败导致程序员混淆。
  • 感谢您的帮助,但这并没有什么不同。返回数组中的第二个 $count=0 且没有警告。

标签: arrays perl loops if-statement conditional-statements


【解决方案1】:

foreach (@parameter) 循环为'a' 运行它的主体。在该循环中,foreach (&lt;INPUT&gt;) 循环将输入消耗到其末尾。

foreach (@parameter) 循环然后为'b' 运行它的主体。在该循环中,foreach (&lt;INPUT&gt;) 循环没有输入,因为它已经被消耗掉了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多