Here is an evil way with that uses a closure that I just
read about in the Damian's book
Object Oriented Perl :
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;
}
Eat your heart out, Java.
UPDATE:
Thanks to alfie and andye for catching the rounding
error. Actually, i didn't post this for it's practical
use, andye's solution is much more consise and hits the
nail on the head - i just thought this was way cool!
Jeff
R-R-R--R-R-R--R-R-R--R-R-R--R-R-R--
L-L--L-L--L-L--L-L--L-L--L-L--L-L--
|