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

use*_*415 -6 perl

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

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

if ($a=="A")|| ($a== "T")|| ( $a == "C")|| ($a== "G")
{
    print $a;
}
else
{
    print "Error";
}
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 7

首先,您有一个语法错误:if语句的条件表达式必须是parens.

第二个错误是通过使用找到的use strict; use warnings;,你应该经常做的事情.错误是使用数字比较(==),其中eq调用字符串比较().

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

  • 所以你已经修复了第一个错误,但你仍然没有使用`use strict; 使用警告;`,`eq`和`chomp`. (3认同)

Bor*_*din 7

直接的问题是,他的整个逻辑表达式if必须在括号中.

此外

  • 您必须使用eq而不是==比较字符串

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

  • 通常使用STDIN <>而不是使用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";
}
Run Code Online (Sandbox Code Playgroud)