我有一个包含x项的数组:
my @arr= qw( mother child1 child2 child3);
现在我想要iet this这个数组。每个循环都应附加一个条目:
我如何用perl实现这个目标?
答案 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