2014-10-09 81 views
0

我正在尝试使用for循环进行计算,然后将结果推送到数组上。这是我想与做这个剧本的部分:为什么当我使用嵌套for循环运行我的代码时,什么都不会发生?

my @deltaX; 

for my $one (@protx) { 
    for my $two (@lipidx) { 
     my $deltadX = $one - $two; 
     push @deltaX, $deltadX; 
    } 
} 
print "@deltaX \n"; 

当我做这个好像没有任何反应,我的电脑说,perl正在运行,但没有输出或警告。

当我打印数组里面的内容for循环,在另一方面,它似乎工作:

my @deltaX; 

for my $one (@protx) { 
    for my $two (@lipidx) { 
     my $deltadX = $one - $two; 
     push @deltaX, $deltadX; 
     print "@deltaX \n"; 
    } 
} 

我怎样才能使这项工作时,print是外环外的?

+2

仅供参考,'$ one'和'$ two'是可怕的变量名称。选择一些描述变量中包含的内容,比如'$ protein'或'$ lipid'。 – ThisSuitIsBlackNot 2014-10-09 15:05:13

+0

此外,一致缩进,你有什么难以阅读。 – ThisSuitIsBlackNot 2014-10-09 15:06:03

+0

如果您的计算机说perl正在运行,则这些循环可能还没有耗尽所有可能的配对。 – choroba 2014-10-09 15:13:39

回答

0

为了让您放心,您的代码正在运行,而实际上正在做的事情,您可以打印一些进度点。此示例每次将10,000个项目推入阵列时打印一个点,并每隔100个点开始一个换行符。

my @deltaX; 

for my $one (@protx) { 
    for my $two (@lipidx) { 
     my $deltadX = $one - $two; 
     push @deltaX, $deltadX; 

     print '.' unless @deltaX % 10_000; 
     print "\n" unless @deltaX % 1_000_000; 
    } 
} 
print "@deltaX \n"; 
+0

不错,这是一个很酷的想法。我现在看到我的脚本正在运行,所以它必须是数据的大小。 – 2014-10-09 17:41:13

+0

这是一个相当标准的调试技术,但我认为你不太可能意识到这一点。我担心,当你在一个专业程序员的网站上发布消息时,你必须期待一些消息,因为这些程序员会将你认为新鲜的东西视为理所当然。 – Borodin 2014-10-09 17:50:20

相关问题