我想将@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停止。因此它绝对不是内存问题。这应该很简单,但我无法弄清楚我的代码有什么问题。帮助新手?
答案 0 :(得分:9)
当我在程序的末尾添加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
进行初始化。你为什么需要这个?