【发布时间】: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