# @frame[0] = @frame[0] + @frame[1]; # @frame[1] = @frame[2]; # @frame[3] = @frame[2]; is better written as: $frame[0] += $frame[1]; $frame[1] = $frame[2]; $frame[3] = $frame[2]; You may notice that I also changed @frame[0] = @frame[0] + @frame[1]; to $frame[0] += $frame[1]; just because it is shorter and nicer. count($frame[0]); #### return fib(@frame) unless($frame[0] >= 4000000); } sub count { my $increment = @_; if(($increment % 2) == 0) { $result = $result + $increment; } Another thing: When I do division by 2 and I'm looking for the remainder, I always use & 1 instead of % 2 like so: if(($increment & 1) == 0)