2014-03-18 108 views
-6

爲什麼在下面的腳本中出現語法錯誤?爲什麼我的複合語句中出現語法錯誤?

print "Enter Sequence:"; 
$a = <STDIN>; 

if ($a=="A")|| ($a== "T")|| ($a == "C")|| ($a== "G") 
{ 
    print $a; 
} 
else 
{ 
    print "Error"; 
} 
+0

什麼是chomp?我仍然)||那個錯誤? – user3434415

+0

非常尷尬:(我只是要求用戶輸入A G C T,如果他沒有輸入那麼它會返回錯誤!如果他進入它將返回輸入 – user3434415

+0

其他不工作,它只是拋出什麼我打印 – user3434415

回答

7

首先,你有一個語法錯誤:一個if語句的條件表達式必須在括號。

第二個錯誤是使用use strict; use warnings;發現的,應該始終這樣做。錯誤是使用數字比較(==),其中字符串比較(eq)被調用。

最後一個問題是$a幾乎肯定會包含一個以換行符結尾的字符串,因此chomp是按順序排列的。

+0

print「Enter Sequence:」; $ a = ; if($ a ==「A」|| $ a ==「T」|| $ a ==「C」|| $ a ==「G」) { print $ a; } else { print「Error」; } – user3434415

+0

@ user3434415:你想'$ a = ; chomp $ a;如果($ a eq「A」|| ... – ysth

+3

所以你已經修復了第一個錯誤,但是你仍然沒有使用'use strict;使用警告;''''eq'和'chomp'。 – ikegami

7

目前的問題是他整個if的邏輯表達式必須在括號內。

此外

  • 必須使用eq,而不是==比較字符串

  • 你輸入的字符串將有一個換行符,所以它看起來像"C\n",並不會匹配一個簡單的字符串。在比較之前,您需要輸入chomp

  • 通常使用<>而不是<STDIN>從STDIN讀取更好。你可以在命令行中輸入文件,或從標準輸入讀,如果沒有輸入被提供

  • 這樣,必須始終把use strictuse warnings程序的頂部。這將捕捉許多您可能忽略的簡單錯誤

  • 您不應該使用$a作爲變量名稱。它是Perl本身保留的一個符號,並且沒有說明變量的用途

  • 最好使用正則表達式來進行簡單的比較。它使你的代碼更容易閱讀,通常會使執行非常快得多

請看看這個節目,我覺得你想要做什麼。

use strict; 
use warnings; 

print "Enter Sequence: "; 
my $input = <>; 
chomp $input; 

if ($input =~ /^[ATCG]$/i) { 
    print $input, "\n"; 
} 
else { 
    print "Error"; 
} 
相關問題