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

}

最初の質問は、なぜ最初の条件がループでスタックしたのか、2番目の質問はどうすれば修正できるのかということです。ヘルプ/アドバイス/ソリューションを本当にいただければ幸いです。:)

4

1 に答える 1

1

foreach (@parameter)ループはその本体を実行します'a'。そのループ内で、ループはforeach (<INPUT>)最後まで入力を消費します。

次に、foreach (@parameter)ループはその本体を実行し'b'ます。そのループ内では、foreach (<INPUT>)ループはすでに消費されているため、入力はありません。

于 2012-08-15T23:16:16.427 に答える