這不是通用的問題。我問過這個問題,因爲我對創建Perl數組感到困惑。如何在Perl中創建數組和哈希值?
- 如何創建或定義數組或散列?還有什麼其他方法可以做到這一點?
- 如何清除數組或散列?還有什麼其他方法可以做到這一點?
- 如何用空元素創建數組或散列?
- 什麼是用out值創建散列的方法?
這不是通用的問題。我問過這個問題,因爲我對創建Perl數組感到困惑。如何在Perl中創建數組和哈希值?
詞彙數組和散列創建空的。您可以創建一個新的詞彙數組或哈希與my
:
my @array;
my %hash;
在大多數情況下,你應該只使用詞彙數組和哈希,但您可以創建封裝陣列或our
哈希:
our @array;
our %hash;
@array
和%hash
在這種情況下可能有也可能沒有數據(如果它們是以前創建的,則不會清除它們的內容)。這些變量的名稱是詞法範圍的,但數據包範圍的,所以如果你說:
{
our @a = (1 .. 5);
}
{
our @a;
print "@a\n";
}
它仍然會打印"1 2 3 4 5\n"
。
有很多方法可以清除散列或數組。最常見的是指定一個空列表吧:
@array =();
%hash =();
您還可以使用undef
清除散列或數組:
undef @array;
undef %hash;
pop @array while @array;
shift @array while @array;
splice @array, 0, scalar @array;
也可以通過分配一個號碼到$#array
修改元件的數目和陣列它的名字的形式。如果您指定一個負值,陣列將被清空:
$#array = -1;
+1:你是一個非常有耐心的人... – 2010-10-05 20:37:56
@ carrot-top多麼好的方式來描述我的病情。 – 2010-10-05 22:27:03
如果您在使用此類基礎知識時遇到問題,您應該查看perldoc perlsyn
。它涵蓋了語言的語法,並且應該告訴你你需要什麼。
可以通過分配列表(包括空列表)創建數組和散列:
my @a1; # empty array
my @a2 = 'a';
mh %h1; # empty hash
my %h2 = 'a'; # a => undef
my %h3 = ('a', 'b'); # 'a' => 'b'
my %h4 = (a => 'b'); # 'a' => 'b'
可以清除通過顯式指定一個空列表數組或哈希:
@a2 =();
%h3 =();
它聽起來像你可以從Perl tutorials and beginners guides中獲益。有很多例子可以完全滿足你的要求。
要記住的一件事是哈希和數組幾乎是相同的(概念上),但數組是通過整數索引的,並且哈希是由字符串索引的。在語法上,你引用這些指數的方式不同,但從概念上講,這就是你如何看待它們的方法。
我會添加一個其他區別:數組是有序的,哈希是無序的。也就是說,如果你遍歷一個給定的數組,你將總是以相同的順序返回項目,但是哈希不能保證['keys']返回的值的順序(http:// perldoc .perl.org/functions/keys.html),['values'](http://perldoc.perl.org/functions/values.html)或['each'](http://perldoc.perl。 org/functions/each.html)。 – 2010-10-05 16:51:07
是的,這是一個很好的觀點。當然,還有其他許多不同之處,但這兩個可能對於試圖解決主要差異的人來說很有意義。 – CanSpice 2010-10-05 16:55:42
創建陣列:
my @array = (1, 2, 3, 4);
創建哈希:
my %hash = (
one => 1,
two => 2,
three => 2,
four => 2,
);
清除數組或哈希:
@array =();
%hash =();
創建空數組/散列:
正如您向您建議的無數次,您需要坐下來閱讀文檔並閱讀一些入門書籍。 [「學習Perl」](http://en.wikipedia.org/wiki/Learning_Perl)非常出色,並且對您的益處遠不止於要求諸如此類的開放式問題。 – Ether 2010-10-05 16:40:49