Ответ 1
my $foo = join ',', @bar[0..$#bar-1];
будет конкатенировать (посредством запятой) все элементы массива @bar, кроме последнего, в foo.
Привет
БВУ
Мне нужно извлечь все элементы в массиве, кроме последнего, и сохранить их в скаляре для последующего использования. Сначала я подумал, что это будет возможно с использованием массивов массивов, но кажется, что вы не можете рассчитывать назад. Например:
my $foo = ($bar[0..-2]);
или
my $foo = ($bar[-2..0]);
Любая помощь будет принята с благодарностью, поскольку это начинает приводить меня в бешенство, и я не смог найти решение в другом месте или экспериментировать.
Oskar
my $foo = join ',', @bar[0..$#bar-1];
будет конкатенировать (посредством запятой) все элементы массива @bar, кроме последнего, в foo.
Привет
БВУ
my @foo = @bar;
pop @foo;
или
my @foo = @bar[ [email protected] .. -2 ];
или если это нормально, чтобы изменить @bar, просто
my @foo = splice( @bar, 0, -1 );
@foo = @bar[0 .. $#foo - 1];
Если вы хотите создать head-scratcher:
my @x = (1, 2, 3);
print "@x[[email protected] .. -2]";
Это сохранит все элементы массива, кроме последнего, в скаляр. Каждый элемент массива будет разделен одним пробелом.
use strict;
use warnings;
my @nums = 1 .. 6;
my $str = "@nums[0 .. $#nums - 1]";
print $str;
__END__
1 2 3 4 5
Разве вы не хотите хранить элементы в другом массиве? Если вы храните их в скаляре, может быть проблематично их получить. В моем примере выше, если какой-либо элемент массива уже имел одно пространство, вы не сможете правильно восстановить массив из скаляра.