>>234 Perl5 (問題の意図をくみ取り違えていなければ、下記で良い筈…ただし実の距離が一桁以下の場合はNGかも…)

for $s (qw{0.003 0.01 0.4 0.96}) {
 $d = 1;
 while ($s * $d < 10) { $d *= 10 }
 if (50 <= ($s * $d)) {
  $d *= 2;
 } elsif (20 <= ($s * $d)) {
  $d *= 5;
 } else {
  $d *= 10;
 }
 print "$s -> ", $s * $d, "\n";
}

実行結果
~ $ perl 17_234_scale_bar_len.pl
0.003 -> 150
0.01 -> 100
0.4 -> 200
0.96 -> 192