2011-08-02 64 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')被認爲是真的。