如果循环在perl中不起作用

如果循环在perl中不起作用,perl,if-statement,Perl,If Statement,请查看此脚本并提出可能的解决方案 my $otext = 'ABCDEABCDEABCDEABCDEABCDE'; my $len = length($otext); print "length of string is:\n".$len; $n = 1; if ($n == 1) { if (substr($otext, -1, 1) eq "E") { if ($len >= 3) { if ($len == 3) {

请查看此脚本并提出可能的解决方案

my $otext = 'ABCDEABCDEABCDEABCDEABCDE'; 
my $len   = length($otext);
print "length of string is:\n".$len;
$n = 1;

if ($n == 1) {

    if (substr($otext, -1, 1) eq "E") {

        if ($len >= 3) {

            if ($len == 3) {

                $len1 = 2 * $len - 1; 
                $len2 = 3 * $len - 2; 
            }
            else {

                $len1 = 2*$len-1; 
                $len2 = 3*$len-3;
            }
        }
        else {

             $len1 = 0;
             $len2 = 0;     
        }   
        print "Length-1 is:". $len1;
        print "Length-2 is:" .$len2;
    }
}
else { 

    print "\n It's else loop ";
}

n
条件下应为
$n

if ($n==1){

在顶层,您使用了if as
if(n==1)
,它不会编译。。如果变量是标量,则应在其前面加上
$
。。因此,如果($n==1)使用


此外,
如果
不是循环,则它是一个构造

除了其他答案之外,我还想对您的代码提出一些改进建议

消除死代码 将始终运行代码1

避免C主义 测试最后一个字符是否为
E
。在Perl中,使用正则表达式可以编写得更好:

$otext =~ /E$/
$
表示正则表达式中字符串的结尾

简化你的逻辑 您有以下构造:

if ($len >= 3) {
  if ($len == 3) {
    # Code 1
  } else {
    # Code 2
  }
} else {
  # Code 3
}
这完全等于

if ($len == 3) {
  # Code 1
} elsif ($len > 3) {
  # Code 2
} else {
  # Code
}
声明变量 始终在使用变量的最外层范围内使用
my
声明变量。这条规则的唯一例外是(a)当你写一行快速的单行程序时,或者(b)你有很好的理由使用全局变量

把新行放在它们所属的地方 我相信这个代码

  print "Length-1 is:". $len1;
  print "Length-2 is:" .$len2;
旨在产生如下输出:

Length-1 is: 0
Length-2 is: 0
而不是

Length-1 is:0Length-2 is:0
我会将变量
$len1
$len2
插入字符串,添加换行符,并包含一个空格:

  print "Length-1 is: $len1\n";
  print "Length-2 is: $len2\n";

请不要让我们猜测这段代码应该做什么以及它是如何失败的。不过有一个提示:
if
不是循环构造(甚至在Perl、AFAIK中也不是)。首先,和
if
块不是循环。第二,问题是什么?它怎么不起作用?是否有错误消息?你想要实现什么?此外,您的代码没有编译。添加
使用严格
使用警告
,您将看到问题所在。+1用于涵盖代码的所有方面。。太好了:)
Length-1 is:0Length-2 is:0
  print "Length-1 is: $len1\n";
  print "Length-2 is: $len2\n";