为什么我的复合if语句中出现语法错误?

时间:2014-03-18 18:00:11

标签: perl

为什么我在以下脚本中出现语法错误?

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

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

2 个答案:

答案 0 :(得分:7)

首先,您遇到语法错误:if语句的条件表达式必须在parens中。

使用use strict; use warnings;找到第二个错误,这是您应该经常做的事情。错误是使用数字比较(==),其中要求进行字符串比较(eq)。

最后一个问题是,$a几乎肯定会包含一个以换行符结尾的字符串,因此chomp是有序的。

答案 1 :(得分:7)

当前问题是if整个逻辑表达式必须在括号中。

另外

  • 您必须使用eq代替==来比较字符串

  • 您的输入字符串将有一个尾随换行符,因此它看起来像"C\n",并且不匹配简单的单字符字符串。在比较之前,您需要chomp输入

  • 通常最好使用<>而非<STDIN>从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";
}