Perl:创建已知大小的数组

时间:2011-05-17 07:31:32

标签: arrays perl variables


我必须存储使用Parallel :: ForkManager运行的请求中的数据 但它不按顺序,我的意思是,我轮询了一个交换机的所有端口,但其中一些回答比其他端口更快。所以,我不知道如何保存它,以后再显示它。

我能这样做吗?

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

或者我应该使用带有端口数的%hash作为键,但它似乎不是最好的 谢谢。

3 个答案:

答案 0 :(得分:7)

你可以这样做:

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

但是如果某些端口没有响应,则在阵列的插槽中将有未填充的undef条目。如你所说,使用哈希会更清晰:

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

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

答案 1 :(得分: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

如果您有许多端口并且担心有太多空条目,请使用哈希。我看不出有任何理由不这样做。

答案 2 :(得分:5)

散列是用于“sparse arrays”的良好数据类型。好像你正在描述那个;稀疏数组 - 大多数元素未定义的数组。 Perl会让你预先标准一个标准数组,但这不是你需要的。您似乎需要一个哈希值,例如,如果您有$array[2]$array[23],则无关紧要。使用原生数组时,只要创建$array[23],23以下的所有未使用元素都会以“undef”作为其值生成。

使用哈希,您将拥有$item{2}$item{23}。您可以使用keys()函数获取散列中包含哪些项目的列表。