我的节目是
#!\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无效?是什么原因?
答案 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