per*_*ser 1 perl loops increment
我有一个问题,我希望有人可以提供帮助.
使用以下......
my @sequence = (1..9);
my $newSequence = join " - ", @sequence;
Run Code Online (Sandbox Code Playgroud)
...我可以打印连字符分隔的数字序列 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
我遇到问题,并且不太了解解决的最佳逻辑方法,是在每次迭代时增加数字序列中变量字符串位置的循环(以产生下面显示的输出类型).
my $varString = "DOG"
Run Code Online (Sandbox Code Playgroud)
我希望实现的输出:
DOG - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - DOG - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - DOG - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - DOG - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - DOG - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - DOG - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - DOG - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - DOG - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - DOG
Run Code Online (Sandbox Code Playgroud)
这样做最好的方法是什么?非常感谢您对此的帮助
我错过了什么吗?当然这就是所需要的.
use strict;
use warnings;
my @sequence = 1 .. 9;
for my $i (0 .. $#sequence) {
my @newseq = @sequence;
$newseq[$i] = 'DOG';
print join(' - ', @newseq), "\n";
}
Run Code Online (Sandbox Code Playgroud)
产量
DOG - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - DOG - 3 - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - DOG - 4 - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - DOG - 5 - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - DOG - 6 - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - DOG - 7 - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - DOG - 8 - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - DOG - 9
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - DOG
Run Code Online (Sandbox Code Playgroud)
更新
对于那些专注于增加CPU空闲时间的人来说,这是另一种选择.我提供它是因为它比目前提出的任何解决方案都更清晰,更快.输出相同.
use strict;
use warnings;
my @sequence = 1 .. 9;
for my $i (0 .. $#sequence) {
local $sequence[$i] = 'DOG';
my $s = join(' - ', @sequence);
}
Run Code Online (Sandbox Code Playgroud)