#!/usr/bin/perl use strict; use warnings; package Range; sub new { my ($class, $lower, $upper, $delta) = @_; bless { lower => $lower, upper => $upper, delta => $delta || ($upper-$lower)/1000, current => $lower, }, $class; } sub next { my $self = shift; ($self->{current} += $self->{delta}) < $self->{upper}; } package main; sub integrate { my ($function, $iter) = @_; my $sum; $sum += $function->($iter->{current}) * $iter->{delta} while $iter->next; $sum; } printf "%.2f\n", integrate sub {(shift)**2}, new Range (2, 5); __END__