如果循环在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 asif(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";