[英]No output from Perl script
我想在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
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 );
您的代码执行此操作:
$dihed=150.0;
while ($dihed <= 10.0) {
$dihed -= $decr;
...
}
在while
循环的第一次迭代中,布尔条件失败(因为150.0不小于或等于10.0)。 因此, while
循环内的代码都不会执行。
也许您的布尔条件应该是$dihed >= 10.0
。
您的代码无法正常工作的原因是您的测试有错误的感觉:您从150开始,然后在值小于或等于 10的情况下循环运行,从不
重复添加浮点值也是一个不好的主意,因为不正确的结果会越来越多,并导致输出错误。 在这种情况下,您使用的是0.25,它恰好可以精确地表示为二进制分数,但是如果您想要不同的增量,则应该知道最好使用整数来进行计数并将其一一转换为浮点数
最后,您不要求整数中的任何小数位,而要求分数值中的两个小数位。 这可能不是绝对必要的,但是最好使用显式格式字符串以避免某些意外情况
这就是我写你的代码的方式
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.