-1

私のプログラムは

#!\usr\bin\perl -w

my @one= ("sun", "moon", "star");
my $three="SON"; 
my $flag= 0;
my $tester_1=0 ; 
my $tester_2= 0;
my $i= 0;

push (@one, $three);

print @one; 
print join(" ", @one);

while (@one[$i]= $three) 
{
    #flag 1
    if (@one[$i] ne "moon"&& @one[$i] ne "star") 
    {
        $tester_1= 1; 
    }

    ##flag2 
    if ($i<= 99) 
    {
        $tester_2=1;
    }

    #real condition 
    if ($tester_1= 1)
    { 
        if ($tester_2= 1)   
        {
            print @one[$i];
            $i++; 
        }
    }
}

プログラムを実行します。ループは無限回実行されます。フラグ 2 で $i<= 99; という条件を設定したため、プログラムは 100 番目の SON を出力した後に停止するはずです。しかし、何らかの理由で $i<= 99 が機能していませんか? 理由は何ですか?

4

3 に答える 3

6

警告が有効になっていることを示しています。あなたのコードは警告を生成します。 それらを修正すると、問題が修正されます。警告を理解できない場合は、追加してみてくださいuse diagnostics;

于 2013-01-21T00:57:15.623 に答える
4

問題は、比較で「=」を使用していることのようです(たとえばif($tester_1 = 1)、どこにあるべきかif($tester_1 == 1))。この種のエラーは、スクリプトを実行したときにPerlによって出力される警告に表示されます。

また、次のように置き換える必要があり
while (@one[$i]= $three)ますwhile ($one[i] == $three)
if (@one[$i] ne "moon"&& @one[$i] ne "star")if ($one[$i] ne "moon"&& $one[$i] ne "star")

于 2013-01-20T23:24:54.590 に答える
0
#!\usr\bin\perl 
use strict;
use warnings;

my @one= ("sun", "moon", "star");
my $three="SON"; 
my $flag= 0;
my $tester_1=0 ; 
my $tester_2= 0;
my $i= 0;

push (@one, $three);    
print @one,"\n"; 
print join(" ", @one),"\n";   

while ($one[$i] eq $three) 
{
 if ($one[$i] ne "moon"&& $one[$i] ne "star") 
 {
    $tester_1= 1; 
 }
 if ($i<= 99) 
 {
    $tester_2=1;
 }
 if ($tester_1 == 1)
 { 
    if ($tester_2 == 1)   
    {
        print $one[$i];
        $i++; 
    }
 }
}

これは、上記のスクリプトで取得した出力です。

sunmoonstarSON
sun moon star SON
于 2013-01-30T06:20:53.793 に答える