2009-03-04 17 views

cevap

34
@last_n = @source[-$n..-1]; 

sonra bir undef s, gerektiriyorsa:

@last_n = ($n >= @source) ? @source : @source[-$n..-1]; 
+0

Kaynak, $ n öğesinden daha azsa bu işe yaramaz. – mike

+0

Tamam çalışıyor. undefs, @source'ın değer içermediği pozisyonlarda @last_n'a girer; bu, "son N elemanlarını" almak için ne anlama geldiğinin tam olarak anlamsız-mantıksız semantiği için doğrudur. – chaos

+0

oh, Hiç böyle olumsuz aboneler kullanmadım, bugün bir şey öğrendim! – Nathan

-2
my $size = (scalar @list) - 1; 
my @newList = @list[$size-$n..$size]; 
+0

Çalışmıyor. İmzaya ihtiyacınız var, virgül değil, ve $ boyutu bire göre çok büyük. – chaos

+0

Haklısınız, çok fazla zamanınız olsun - –

+0

May'i eşleştirmek için düzenleyeyim. Sadece bir değişkenin yerine scalar (@list) - 1 yerine Nathan gibi bir liste söyleyeyim. – chaos

2
@a = (a .. z); 
@last_five = @a[ $#a - 4 .. $#a ]; 
say join " ", @last_five; 

çıkışlar: Y Z w

v

1

basit, matematik yok:

@a = reverse @a; 
@a = splice(@a, 0, $elements_to_keep); 
@a = reverse @a; 
İlgili konular