为什么我的($ i)索引不起作用?

时间:2013-01-20 23:11:44

标签: perl indexing

我的节目是

#!\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&lt; = 99无效?是什么原因?

3 个答案:

答案 0 :(得分:6)

您显示已启用警告;您的代码会生成警告。 修复它们,您将解决问题。如果您无法理解警告,请尝试添加use diagnostics;

答案 1 :(得分: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")的{​​{1}}

答案 2 :(得分: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