2010-08-17 14 views
10

Ho bisogno di estrarre tutti gli elementi in un array tranne l'ultimo e di memorizzarli in uno scalare per un uso successivo. In un primo momento, ho pensato che sarebbe stato possibile utilizzare le sezioni dell'array, ma sembra che non si possa contare all'indietro. Per esempio:perl - come estrai tutti gli elementi di un array tranne l'ultimo?

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

o

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

Qualsiasi aiuto sarebbe molto apprezzato come questo sta cominciando a farmi impazzire, e sono stato in grado di trovare una soluzione altrove o attraverso la sperimentazione.
Oskar

+1

ITYM '@ foo' e' @pluto [...] '. –

risposta

16

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

concatenerà (da virgola) tutti gli elementi della matrice @pluto tranne l'ultimo in foo.

saluti

RBO

+1

grazie per la rapida risposta, mi hai risparmiato un sacco di tempo e frustrazione. –

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

Se si desidera creare una testa-scratcher:

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

Questo memorizzerà tutti gli elementi dell'array, ad eccezione dell'ultima, in uno scalare. Ogni elemento dell'array sarà separato da un singolo spazio.

use strict; 
use warnings; 

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

__END__ 

1 2 3 4 5 

Non vuoi davvero memorizzare gli elementi in un altro array? Se li si archivia in uno scalare, può essere problematico recuperarli. Nel mio esempio precedente, se qualche elemento dell'array aveva già un singolo spazio, non sarebbe possibile ricostruire adeguatamente la matrice dallo scalare.

+1

grazie per la buona risposta, ma non mi piacerebbe memorizzarli come uno scalare come voglio girare "nome/i iniziale/i cognome/i" in "cognome, nome/i iniziale/i" e avere già estratto il cognome e aggiunto una virgola a non è stato possibile ottenere il nome e le iniziali. –

10
my @foo = @bar; 
pop @foo; 

o

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

o se è ok per cambiare @pluto, basta

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

grazie per la rapida risposta, ricorderò gli esempi per dopo, potrebbero tornare utili –

+0

Penso che pop sia un po 'più bello di unire per rimuovere l'ultimo elemento :) –

+0

@brian d foy: Penso che tu abbia ragione:) – ysth

Problemi correlati