У меня есть массив с x элементами:

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

Теперь я хочу перебрать массив. Каждый цикл должен добавлять запись:

  1. мать
  2. мать / ребенок1
  3. мать / ребенок1 / ребенок2
  4. мать / ребенок1 / ребенок2 / ребенок3

Как я могу реализовать это с помощью Perl?

1
user5861285 8 Сен 2016 в 11:23

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

Обратите внимание, что это, по сути, тот же алгоритм, что и показывает Дэйв Кросс , но я использовал стандартный блок for, поскольку я предполагаю, что вы захотите что-то сделать с путями, кроме их печати, и я удалил нумерацию, поскольку я думаю, что это была просто иллюстративная часть вашего вопроса.

2
Community 23 Май 2017 в 12:02

Вот несколько более идиоматическое решение.

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

say $_ + 1, '. ', join ('/', @arr[0 .. $_]) for 0 .. $#arr;
2
Dave Cross 8 Сен 2016 в 09:35