pra*_*ant -4 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) {
$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 ";
}
Run Code Online (Sandbox Code Playgroud)
除了其他答案之外,我还建议您对代码进行一些改进
my $n = 1;
if ($n == 1) {
# Code 1
} else {
# Code 2
}
Run Code Online (Sandbox Code Playgroud)
将始终运行代码1.
substr($otext,-1,1) eq "E"
Run Code Online (Sandbox Code Playgroud)
测试最后一个字符是否为E.在Perl中,这可以用正则表达式编写得更好:
$otext =~ /E$/
Run Code Online (Sandbox Code Playgroud)
在$表示在正则表达式的字符串的末尾.
你有这个结构:
if ($len >= 3) {
if ($len == 3) {
# Code 1
} else {
# Code 2
}
} else {
# Code 3
}
Run Code Online (Sandbox Code Playgroud)
这完全等于
if ($len == 3) {
# Code 1
} elsif ($len > 3) {
# Code 2
} else {
# Code
}
Run Code Online (Sandbox Code Playgroud)
始终my在使用它们的最外层范围内声明变量.唯一的例外是(a)当你写一个快速班轮或(b)你有一个非常好的理由使用全局.
我相信这段代码
print "Length-1 is:". $len1;
print "Length-2 is:" .$len2;
Run Code Online (Sandbox Code Playgroud)
旨在产生类似的输出
Length-1 is: 0
Length-2 is: 0
Run Code Online (Sandbox Code Playgroud)
并不是
Length-1 is:0Length-2 is:0
Run Code Online (Sandbox Code Playgroud)
我插你的变量$len1和$len2成字符串,追加新行,并包括一个空间:
print "Length-1 is: $len1\n";
print "Length-2 is: $len2\n";
Run Code Online (Sandbox Code Playgroud)