Perl - как вы извлекаете все элементы массива, кроме последнего?

Мне нужно извлечь все элементы в массиве, кроме последнего, и сохранить их в скаляре для последующего использования. Сначала я подумал, что это будет возможно с использованием массивов массивов, но кажется, что вы не можете рассчитывать назад. Например:

my $foo = ($bar[0..-2]);  

или

my $foo = ($bar[-2..0]);  

Любая помощь будет принята с благодарностью, поскольку это начинает приводить меня в бешенство, и я не смог найти решение в другом месте или экспериментировать.
Oskar

Ответ 1

my $foo = join ',', @bar[0..$#bar-1];

будет конкатенировать (посредством запятой) все элементы массива @bar, кроме последнего, в foo.

Привет

БВУ

Ответ 2

my @foo = @bar;
pop @foo;

или

my @foo = @bar[ [email protected] .. -2 ];

или если это нормально, чтобы изменить @bar, просто

my @foo = splice( @bar, 0, -1 );

Ответ 3

@foo = @bar[0 .. $#foo - 1];

Если вы хотите создать head-scratcher:

my @x = (1, 2, 3);
print "@x[[email protected] .. -2]";

Ответ 4

Это сохранит все элементы массива, кроме последнего, в скаляр. Каждый элемент массива будет разделен одним пробелом.

use strict;
use warnings;

my @nums = 1 .. 6;
my $str = "@nums[0 .. $#nums - 1]";
print $str;

__END__

1 2 3 4 5

Разве вы не хотите хранить элементы в другом массиве? Если вы храните их в скаляре, может быть проблематично их получить. В моем примере выше, если какой-либо элемент массива уже имел одно пространство, вы не сможете правильно восстановить массив из скаляра.