use strict; use vars qw($iterator $next); $iterator = iterate(0.1,9.4,0.1); while ($iterator->($next)) { # the value is in $next, but since we are # iterating by a fraction, some numbers will # not be rounded up (e.g. 4.999999 instead of 5.0) my ($rounded) = $next =~ /^(\d+(\.\d)?)/; $rounded .= '.0' unless length $rounded > 1; print "$rounded\n"; } sub iterate { my ($from,$to,$step) = @_; my $next = $from - $step; my $cref = sub { $next += $step; return if $next > $to; $_[0] = $next; return 1; }; return $cref; }