-5

Please take a look at this script and suggest possible solutions..

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 ";
}
4

3 回答 3

5

除了其他答案,我想建议对您的代码进行一些改进

消除死代码

my $n = 1;
if ($n == 1) {
  # Code 1
} else {
  # Code 2
}

始终运行代码 1。

避免 C 主义

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

测试最后一个字符是否为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";
于 2012-09-25T11:09:51.750 回答
3

在顶层你使用了你的 if as if (n == 1),那将不会编译。你的变量应该以 a 为前缀,$如果它是一个标量。所以,使用if($n == 1)

此外,if它不是一个循环,它是一个构造..

于 2012-09-25T10:47:11.350 回答
2

n$n处于以下if状态:

if ($n==1){
于 2012-09-25T10:47:06.547 回答