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

Arrays perl数组大小小于它应该的大小,arrays,perl,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。所以这绝对不是一个记忆问题。这应该足够简单,但我不知道我的代码出了什么问题。帮助新手? 当我将sleep 1000添加到程序

我想将@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。所以这绝对不是一个记忆问题。这应该足够简单,但我不知道我的代码出了什么问题。帮助新手?

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

在程序的早期,可以通过以下语句之一更改缓冲

=1; 标准输出->自动刷新1

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

在程序的早期,可以通过以下语句之一更改缓冲

=1; 标准输出->自动刷新1

或者

输出:

... 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进行初始化。你为什么需要这个

或者

输出:

... 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进行初始化。为什么需要这个?

在这里很好:perl-E'$k=9@丛=$n=4**$k;对于$i=0$我也为我工作。@clump=0 x 4**$k对你有用吗?出于好奇,你想用4^9个零做什么?@Jim Davis-@clump=0x 4**$k有用!非常感谢。@ThisSuitesBlacknot我正在编写一个使用频率阵列查找Ecoli基因组中ori位点的集群查找程序。为此,我需要找到基因组文件中最常见的9-核苷酸序列。最简单的方法是在程序遇到序列时将所有可能的序列转换为相应的数组索引和+1@丛=$n=4**$k;对于$i=0$我也为我工作。@clump=0 x 4**$k对你有用吗?出于好奇,你想用4^9个零做什么?@Jim Davis-@clump=0x 4**$k有用!非常感谢。@ThisSuitesBlacknot我正在编写一个使用频率阵列查找Ecoli基因组中ori位点的集群查找程序。为此,我需要找到基因组文件中最常见的9-核苷酸序列。最简单的方法是,每当程序遇到序列时,将所有可能的序列转换为相应的数组索引和+1。当然,与其每隔两个字符刷新一次,不如只使用print\n;在循环之后,或者使用IO::Handle。。。STDOUT->flush。当然,与其每隔两个字符刷新一次,不如只使用print\n;在循环之后,或者使用IO::Handle。。。STDOUT->flush.你的第一个建议奏效了。谢谢你的帮助:你的第一个建议奏效了。感谢您的帮助: ... 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