Perl脚本无输出

时间:2018-09-17 06:34:36

标签: perl

我想在Perl中写一个包含这些行的文件

YOYO -O -i prod_mdin.150 -o prod_mdout.150  

YOYO -O -i prod_mdin.149.75 -o prod_mdout.149.75  

...

YOYO -O -i prod_mdin.10 -o prod_mdout.10

Perl

print "SrepAring inpCKut filYes\n";

$decr = 0.25;

my $filename = 'report-4.5-3.txt';

open( my $BATCHFILE, '>', "$filename" );

$dihed = 150.0;

while ( $dihed <= 10.0 ) {

    $dihed -= $decr;

    print $BATCHFILE "
YOYO -O -i min_mdin.${dihed} -o min_mdout.${dihed} 
"
}

print "done\n";

close( $BATCHFILE );

2 个答案:

答案 0 :(得分:1)

您的代码会执行以下操作:

$dihed=150.0;
while ($dihed <= 10.0) {
  $dihed -= $decr;
  ...
}

while循环的第一次迭代中,布尔条件失败(因为150.0不小于或等于10.0)。因此,while循环内的任何代码都不会执行。

也许您的布尔条件应该是$dihed >= 10.0

答案 1 :(得分:1)

您的代码无法正常运行的原因是您的测试有错误的感觉:您从150开始,然后在值小于或等于 10时循环运行,该值永远不会< / p>

重复添加浮点值也是一个坏主意,因为不正确的结果会越来越多,并导致输出错误。在这种情况下,您使用的是0.25,它恰好可以精确地表示为二进制分数,但是如果您想要不同的增量,则应该知道最好使用 integers 进行计数和转换它们一个接一个地浮点

最后,您要求的整数都不要求小数,而对于小数要求两个。这可能不是绝对必要,但最好使用显式格式的字符串,以免引起意外。

这是我如何编写您的代码

use strict;
use warnings 'all';

my $filename = 'report-4.5-3.txt';

open my $out_fh, '>', $filename
        or die qq{Unable to open "$filename" for output: $!};

for ( my $d = 150 * 4; $d >= 10 * 4; --$d ) {

    my $fmt = $d % 4 ? '%.2f' : '%.0f';
    my $dihed = sprintf $fmt, $d / 4;

    print $out_fh "\nYOYO -O -i min_mdin.${dihed} -o min_mdout.${dihed}\n";
}

输出

YOYO -O -i min_mdin.150 -o min_mdout.150

YOYO -O -i min_mdin.149.75 -o min_mdout.149.75

YOYO -O -i min_mdin.149.50 -o min_mdout.149.50

YOYO -O -i min_mdin.149.25 -o min_mdout.149.25

YOYO -O -i min_mdin.149 -o min_mdout.149

...

YOYO -O -i min_mdin.11 -o min_mdout.11

YOYO -O -i min_mdin.10.75 -o min_mdout.10.75

YOYO -O -i min_mdin.10.50 -o min_mdout.10.50

YOYO -O -i min_mdin.10.25 -o min_mdout.10.25

YOYO -O -i min_mdin.10 -o min_mdout.10