#!/usr/bin/perl use warnings; use strict; use feature "state"; sub sum # TERM A NEXT B { state $sum; my ($TERM, $A, $NEXT, $B) = @_; if ($A>$B){ my $temp=$sum; $sum=0; return $temp ; } $sum+=&{$TERM}($A); sum( $TERM, &{$NEXT}($A) ,$NEXT, $B); } sub identity{ shift; } sub square{ ((shift)**2); } sub sumint { sum(\&identity,shift,sub {((shift)+1)},shift)} sub sumsq { sum(\&square,shift,sub {((shift)+1)},shift)} #a normal sum from 3-5 print sumint(3,5) . "\n"; #a sum of squares from 3-5 print sumsq(3,5) . "\n";