2011-08-02 61 views
-1

我试图做到在Perl这个布尔表达式这个布尔表达式,我的代码应该是这样的评估在Perl

enter code here 

$flag = 0; 
    while (<INFILE>) 
{ 

if(/name/ && $flag==0) 
{ 
    $flag = 1; 

print "HELLO\n"; 
} 
elsif($flag) 
{ 
    print "Bye\n"; 

我的计划是写这样的

flag=0 
while<> 
if(/name/ && !flag) 
flag=1; 
elsif(flag) 
last; 

那么,我在代码中做了什么我有什么错?这是基于如下的评论

+0

代码块前后需要空行;还缩进4个空格。我为你修好了。 –

+7

亲爱的上帝......请......让它停止...... 您的第一笔业务是跑到外面(忘记穿衣服)并购买Perl Best Practices或其他类似书籍的副本。 为了更有帮助,而不仅仅是提供明智的屁话:请阅读使用严格和警告,词汇变量等。 – yarian

+0

我甚至不知道从哪里开始。我也不知道你在问什么。你问这种“如果没有标志设置,设置标志或其他行动”逻辑是一个好主意吗? – Sorpigal

回答

1

在Perl声明真假值的方式:

while (<>) { 
    $flag = 1 if /name/; 
    if ($flag) { 
     # do something 
    } 
} 

或者,你可以这样做:

while (<>) { last if /name/ } 
while (<>) { 
    # do something 
} 
+0

不,不,我不这样做。我正在寻找/ name /,然后如果我找到它,我开始把行中的/ name /发生的行放到数组中。这只是代码的虚拟轮廓。 – kunal

+0

@kun答案已更新。 – TLP

1

一个简单的答案是:

在Perl中,0或''被认为是错误的。一个非零数字(1,42等)或长度大于0的字符串('true','foo')被认为是真的。