use strict; my @bin_labels = qw( 0 0.1 0.3 1 3 10 30 1000 ); { my $step_size = 0.1; my $start = 5.0; my $finish = 9.0; sub index_to_mag { my $i = shift; return $start + $i * $step_size; } sub mag_to_index { my $mag = shift; return sprintf "%.f", ($mag - $start) / $step_size; } } my @n; for ( my $i = 0; $i < mag_to_index( 9.0 ); ++$i ) { $n[ $i ]{ $_ } = 0 for @bin_labels; } for ( my $mag = 5.5; $mag < 9.0; $mag = sprintf "%.1f", $mag + 0.1 ) { printf "%.1f %f\n", $mag, $n[ mag_to_index( $mag ) ]{ 30 }; }