Perl在序列中的递增点处插入

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)

这样做最好的方法是什么?非常感谢您对此的帮助

Bor*_*din 7

我错过了什么吗?当然这就是所需要的.

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)

  • @gbtimmon:它的工作方式是*code*,(*run*,*optimize*,如果需要)*.不*优化*,*代码*,*运行* (2认同)