-5

このスクリプトを見て、考えられる解決策を提案してください。

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)たが、これはコンパイルされません。変数の前に$if がスカラーである必要があります。したがって、使用します。if($n == 1)

また、ifループではなく、構造です..

于 2012-09-25T10:47:11.350 に答える
2

n$n次のif状態である必要があります。

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