Причина, по которой ваш код не работает, состоит в том, что ваш тест имеет неправильный смысл: вы начинаете с 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