perl - comment voulez-vous extraire tous les éléments d'un tableau à l'exception de la dernière?

voix
10

Je dois extraire tous les éléments d'un tableau à l'exception du dernier, et les stocker dans un scalaire pour une utilisation ultérieure. Au début, je pensais que ce serait possible en utilisant des tranches de tableau, mais il semble que vous ne pouvez pas compter à rebours. Par exemple:

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

ou

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

Toute aide serait grandement apprécié que cela commence à me rendre fou, et j'ai été incapable de trouver une solution ailleurs ou en expérimentant.
Oskar

Créé 17/08/2010 à 16:49
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
16

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

concaténera (par des virgules) tous les éléments de la matrice de @bar sauf le dernier dans foo.

Cordialement

RBO

Créé 17/08/2010 à 16:53
source utilisateur

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

ou

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

ou si elle est autorisé à changer @bar, juste

my @foo = splice( @bar, 0, -1 );
Créé 17/08/2010 à 16:55
source utilisateur

voix
2

Ce stockera tous les éléments du tableau, à l'exception du dernier, dans un scalaire. Chaque élément du tableau sera séparé par un espace.

use strict;
use warnings;

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

__END__

1 2 3 4 5

Vous ne voulez pas vraiment stocker les éléments dans un autre tableau? Si vous les stocker dans un scalaire, il peut être difficile de les récupérer. Dans mon exemple ci-dessus, si un élément du tableau avait déjà un espace unique, vous ne seriez pas en mesure de reconstruire correctement le tableau du scalaire.

Créé 17/08/2010 à 16:54
source utilisateur

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

Si vous voulez créer une tête-scratcher:

my @x = (1, 2, 3);
print "@x[-@x .. -2]";
Créé 17/08/2010 à 16:53
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more