2010-08-17 183 views
10

我需要提取除最後一個數組之外的所有元素,並將它們存儲在標量中供以後使用。 起初,我認爲這可能會使用數組切片,但看起來你不能倒數。 例如:perl - 如何提取除最後一個數組外的所有元素?

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

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

任何幫助,因爲這是開始讓我發瘋不勝感激,我一直無法找到一個解決方案的其他地方或通過實驗。
奧斯卡

+1

ITYM'@ foo'和'@bar [...]'。 – 2010-08-17 15:54:35

回答

16

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

將串聯(用逗號)@bar陣列中的所有元素,除了最後一個成FOO。

問候

RBO

+1

感謝您的快速回答,您爲我節省了很多時間和挫折。 – 2010-08-17 16:06:08

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

如果你想創建一個頭餅刷:

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

這將存儲所有的數組元素,除了最後,爲標量。每個數組元素將被一個空格分開。

use strict; 
use warnings; 

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

__END__ 

1 2 3 4 5 

難道你不是真的想將元素存儲到另一個數組嗎?如果將它們存儲爲標量,則檢索它們可能會有問題。在我上面的例子中,如果數組中的任何元素已經有一個空格,那麼您將無法從標量中正確重建數組。

+1

感謝您的好回覆,但沒有我想將它們作爲標量存儲,因爲我想將「姓氏名字姓氏」變成「姓氏,姓氏名字首字母」,並且已經提取了姓氏並且添加了逗號它,只是無法得到姓名和首字母縮寫。 – 2010-08-17 16:10:31

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

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

或者它是否可以改變@bar,只是

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

感謝您的快速回復,我會記住以後的例子,他們可以派上用場 – 2010-08-17 16:11:56

+0

我認爲流行比刪除最後一個元素的拼接好一點:) – 2010-08-19 12:38:37

+0

@brian d foy:我認爲你是對的: ) – ysth 2010-08-19 15:20:47

相關問題