我正在研究预测疾病结果的模型,并且在我开始尝试创建用户提示之前一直工作。代码在"持续时间停止"提示,位于此代码块的底部。该脚本似乎冻结(闪烁光标)并且没有任何地方,但是处理器使用率为100%,因此它正在做某事。我尝试打印文本,它似乎停止在#34;持续时间"提示。如果您想尝试自己运行,则整个代码都在GitHub上。
我已经看了很多次,并且在任何地方都看不到任何错误,我希望一些新鲜的眼睛可以看到一些东西。我确定我在某个地方犯了一个愚蠢的错误。非常感谢!
编辑:如果我删除所有代码"我的%人口,"它有效。
#!/usr/bin/perl
use 5.10.1;
#use strict;
use warnings;
use Data::Dumper;
use Storable qw(dclone);
print "Enter number of individuals: ";
my $NUM_IND = <STDIN>;
exit 0 if ($NUM_IND eq "");
print "Enter initial number of infections: ";
my $INIT = <STDIN>;
exit 0 if ($INIT eq "");
print "Enter number contacts per individual: ";
my $CONTACT_RATE = <STDIN>;
exit 0 if ($CONTACT_RATE eq "");
print "Enter disease infectious period: ";
my $INFECTIOUS_PERIOD = <STDIN>;
exit 0 if ($INFECTIOUS_PERIOD eq "");
print "Enter disease virulence: ";
my $INFECTIVITY = <STDIN>;
exit 0 if ($INFECTIVITY eq "");
print "Enter disease incubation period: ";
my $INCUB = <STDIN>;
exit 0 if ($INCUB eq "");
print "Enter number of vaccinations per day: ";
my $VAC = <STDIN>;
print "Enter vaccine efficacy: ";
my $EF = <STDIN>;
print "Enter duration of model: ";
my $DURATION = <STDIN>;
exit 0 if ($DURATION eq "");
print "this works";
my %population = ();
答案 0 :(得分:2)
请永远注释掉use strict
。它可能比首先不包括它更糟糕。 strict
对于查找程序中的错误是一个巨大的帮助,应该被接受,而不是避免。
您没有看到this works
的原因是因为没有刷新输出缓冲区。如果你添加
STDOUT->autoflush;
位于程序的顶部(例如,在use
语句之后),它将强制在每个print
语句后刷新缓冲区,您将看到您的文本。
真正的问题是这一行
for (my $i = 0 ; $i = $INIT ; $i++) {
您的条件是分配 $i = $INIT
,只要$INIT
非零,该条件始终为真。
我假设你想要$i < $INIT
,就像其他循环一样。
但是使用Perl的范围运算符会更好远,这更容易阅读并且不容易受到这样的错误的影响。只需使用
for my $i (0 .. $INIT-1) { ... }
并且很明显发生了什么。