2011-05-17 77 views
4


我必須存儲使用Parallel :: ForkManager運行的請求中的數據。
但它不是爲了順序,我的意思是,我輪詢一個開關的所有端口,但其中一些回答比其他人快。所以,我不知道如何保存它,以後再顯示它。Perl:創建已知大小的數組

我可以這樣嗎?

my @array =(); 
$array[10] = "i am a string corresponding to port 10" 
$array[2] = "the one for the port 2" 
... 
print @array; 

或者我應該使用%散列和端口數作爲鍵,但它似乎不是最好的。
謝謝。

回答

7

你可以這樣做:

my @array =(); 
$array[10] = "i am a string corresponding to port 10" 
$array[2] = "the one for the port 2" 
print @array; 

但是,如果某些端口不迴應,你將不得不在沒有填補數組的插槽民主基金項目。正如你所說,使用哈希將清潔劑:

my %hash; 
$hash{10} = "I am port 10"; 
$hash{2} = "I am port 2"; 

foreach my $key (keys %hash) { 
    print "$key: $hash{$key}\n"; 
} 
5

在Perl中,您不必擔心數組的大小。它們根據需要增長:

my @array; # defines an empty array 

$array[0] = 4; # array has one element 
$array[9] = 20; # array has 10 elements now 

print join "-", @array; 

# prints: 4--------20 because the empty places are undef 

如果您有許多端口並且擔心有太多空條目,請使用散列。我看不出有什麼理由不這樣做。

+0

它打印「4 20」,但有更多空間,因爲SE不會打印這些內容。 – Alex 2011-05-17 07:39:02

+0

對......我修正了這個例子 – 2011-05-17 07:42:17

5

哈希是一個很好的數據類型用於「sparse arrays」。好像你只是在描述那個;一個稀疏數組 - 大多數元素都是未定義的。 Perl會讓你預先設定一個標準數組,但這不是你所需要的。您似乎需要散列,例如,如果您有$array[2]$array[23],但沒有關係,則無關緊要。使用本地數組,只要您創建了$array[23],所有未使用的23以下的元素都會以'undef'作爲其值。

使用散列,您將有$item{2}$item{23}。您可以使用keys()函數獲取哈希中保存的項目列表。