perl数组大小应该小于它应该

时间:2015-07-29 21:46:52

标签: arrays perl

我想将@clump的4 ^ 9(= 262144)个索引初始化为0.所以我写了这个:

my $k=9;
my @clump=();
my $n=4**$k;
for(my $i=0;$i<$n;$i++){
   push(@clump,0);
   print "$i ";
}

但它一直冻结在261632!然后我尝试使用$ n = 5 ^ 9(= 1953125)并且我的代码在1952392停止。因此它绝对不是内存问题。这应该很简单,但我无法弄清楚我的代码有什么问题。帮助新手?

2 个答案:

答案 0 :(得分:9)

Suffering from buffering

当我在程序的末尾添加sleep 1000时,将输出流式传输到文件,并读取文件的尾部,我还观察到要打印的最后一个数字是261632和1952392.剩下的输出卡在输出缓冲区中,等待某个事件(缓冲区填满,文件句柄关闭,程序退出或显式刷新调用)以刷新输出。

缓冲可以通过程序早期的以下声明之一进行更改

$| = 1;
STDOUT->autoflush(1);

答案 1 :(得分:3)

#!/usr/bin/env perl

use strict;
use warnings;

my $k = 9;
my $n = 4 ** $k;
my @clump = (0) x $n;

print join(' ', @clump), "\n";
printf "%d elements in \@clump\n", scalar @clump;

或者,

#!/usr/bin/env perl

use strict;
use warnings;

my $k = 9;
my $n = 4 ** $k;
my @clump;
$#clump = $n - 1;
$_ = 0 for @clump;

print join(' ', @clump), "\n";
printf "%d elements in \@clump\n", scalar @clump;

输出:

... 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
262144 elements in @clump

另请注意,在Perl中几乎不需要使用0进行初始化。你为什么需要这个?