【发布时间】:2014-01-03 01:45:42
【问题描述】:
我正在尝试用 perl 中的嵌套“for”循环制作一个小脚本。 在我学习的过程中,起初我做了 3 个 for 循环,效果很好。为了使某些东西更智能,我想将它们嵌套起来,但我不知道出了什么问题。
如果我的输入文本是 ABCDEFGHI 我想获得
text 1 ABC DEF GHI
text 2 BCD EFG HI
text 3 CDE FGH I
但不是它,我的输出是
text1 ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI ABC DEF GHI
text2 BCD EFG HI BCD EFG HI BCD EFG HI
text3 CDE FGH I
这是我的脚本。我正在使用 perl 5.18.1。
use Modern::Perl '2013';
my @text1;
my @text2;
my @text3;
my $entry = shift;
my $len = length $entry;
for (my $i = 2; $i < $len; $i += 3) {
for (my $i = 1; $i < $len; $i += 3) {
for (my $i = 0; $i < $len; $i += 3) {
my $text = substr($entry, $i, 3);
push @text1, uc($text);
}
my $text = substr($entry, $i, 3);
push @text2, uc($text);
}
my $text = substr($entry, $i, 3);
push @text3, uc($text);
}
say "text1 @text1";
say "text2 @text2";
say "text3 @text3";
我已经环顾四周了,这里是http://perldoc.perl.org/perlsyn.html#For-Loops
感谢您的帮助
【问题讨论】:
-
我假设您只是想了解更多信息?如果是这种情况,您应该知道嵌套的 for 循环是您应该尽可能避免的事情,它们只会使您的程序运行得更慢。只需一个循环即可完成您想做的事情。
-
是什么让你认为内循环不应该执行 27 次?
-
是的。我正在努力学习更多。我认为 3 个独立的循环不是很聪明。所以,谢谢你的建议!
-
@Arkadiy 每次外部循环越多,内部循环就会重新开始……但不知道该怎么做。
-
@Tetraodienne “不是很聪明”并不是你想在这里使用的标准;相反,“完成工作”会更好地为您服务。 (嵌套循环也应尽可能避免,因为它们的复杂性成本。考虑一个运行十次的外循环和一个运行十次的内循环;整个过程必须经过 100 次迭代才能完成外循环。现在考虑一个运行十次的外循环和一个运行 一万次次的内循环......)