Pytanie perl - jak wyodrębnić wszystkie elementy tablicy oprócz ostatniej?


Muszę wyodrębnić wszystkie elementy z tablicy z wyjątkiem ostatniej i zapisać je w skalarach do późniejszego wykorzystania. Na początku myślałem, że to będzie możliwe przy użyciu plasterków tablicy, ale wydaje się, że nie można liczyć wstecz. Na przykład:

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

lub

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

Jakakolwiek pomoc byłaby bardzo doceniona, ponieważ to zaczyna mnie doprowadzać do szaleństwa, a ja nie byłem w stanie znaleźć rozwiązania w innym miejscu lub przez eksperymentowanie.
Oskar


11
2017-08-17 15:49


pochodzenie


ITYM @foo i @bar[...]. - Sinan Ünür


Odpowiedzi:


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

połączy (przecinkiem) wszystkie elementy tablicy @bar, z wyjątkiem ostatniego na foo.

pozdrowienia

rbo


17
2017-08-17 15:53



Dziękuję za szybką odpowiedź, zaoszczędzisz mi dużo czasu i frustracji. - Oskar Gibson


my @foo = @bar;
pop @foo;

lub

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

lub jeśli można zmienić @ bar, po prostu

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

10
2017-08-17 15:55



dzięki za szybką odpowiedź, zapamiętam przykłady na później, mogą się przydać - Oskar Gibson
Myślę, że pop jest trochę ładniejszy niż splice do usuwania ostatniego elementu :) - brian d foy
@ Brian d Foy: Myślę, że masz rację :) - ysth


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

Jeśli chcesz stworzyć drapaka głowy:

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

2
2017-08-17 15:53





Spowoduje to zapisanie wszystkich elementów tablicy, z wyjątkiem ostatniej, w skalar. Każdy element tablicy będzie oddzielony pojedynczym odstępem.

use strict;
use warnings;

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

__END__

1 2 3 4 5

Czy naprawdę nie chcesz przechowywać elementów w innej tablicy? Jeśli przechowujesz je w skalarach, ich odzyskanie może być problematyczne. W powyższym przykładzie, jeśli dowolny element tablicy miał już jedną spację, nie byłbyś w stanie poprawnie zrekonstruować tablicy z poziomu skalarnego.


2
2017-08-17 15:54



dziękuję za dobrą odpowiedź, ale nie, chciałbym zapisać je jako skalar, ponieważ chcę zmienić "imię i nazwisko początkowe nazwisko" na "nazwisko, imię i inicjały" i już wypakowałem nazwisko i dodałem do niego przecinek , po prostu nie mogłem uzyskać imienia i inicjałów. - Oskar Gibson