使用perl在循环中连接数组项

时间:2016-09-08 08:23:53

标签: arrays perl

我有一个包含x项的数组:

my @arr= qw( mother child1 child2 child3);

现在我想要iet this这个数组。每个循环都应附加一个条目:

  1. 母亲/ child1
  2. 母亲/ child1 /的child2
  3. 母亲/ child1 /的child2 / child3
  4. 我如何用perl实现这个目标?

3 个答案:

答案 0 :(得分:2)

这是一个稍微惯用的解决方案。

my @arr = qw[mother child1 child2 child3];

say $_ + 1, '. ', join ('/', @arr[0 .. $_]) for 0 .. $#arr;

答案 1 :(得分:2)

您是需要个别路径,还是只想加入所有细分?

要做后者,你可以写

my $path = join '/', @arr;

(顺便说一下,这是一个糟糕的标识符。@告诉我们它是一个数组,所以arr什么都没有添加。我不知道您的数据代表什么,但也许@segments会更好。)

但是如果你需要循环,你可以这样做

use strict;
use warnings 'all';
use feature 'say';

my @arr= qw( mother child1 child2 child3 );

for my $i ( 0 .. $#arr ) {

    my $path = join '/', @arr[0 .. $i];

    say $path;
}

输出

mother
mother/child1
mother/child1/child2
mother/child1/child2/child3

请注意,这与Dave Cross shows的算法基本相同,但我使用了标准块for循环,因为我想你会想要除了打印它们之外的路径做一些事情,而我已经删除了编号,因为我认为这只是你问题的一个说明性部分。

答案 2 :(得分:0)

您可以尝试使用此解决方案:

my @arr= qw( mother child1 child2 child );
my $content;
my $i;
foreach (@arr){
  $content .= '/' if ($content);
  $content .= $_;
  print "$i.$content\n";
  $i++;
}

您期望的结果。

输出

.mother
1.mother/child1
2.mother/child1/child2
3.mother/child1/child2/child3


更新

应该是

use strict;
use warnings 'all';

my @arr= qw( mother child1 child2 child3 );

my $content;
my $i = 1;

foreach ( @arr ) {

  $content .= '/' if $content;
  $content .= $_;

  print "$i.$content\n";

  ++$i;
}

输出

1.mother
2.mother/child1
3.mother/child1/child2
4.mother/child1/child2/child3