#!/usr/bin/env/perl use strict; use warnings; my @answer; #added to suppress warnings, but it still doesn't work. my ($a, $b, $c) = 0; print "0. Value of ARGV is @ARGV; Value of magic array var is @_.\n"; # Take list of arguments from any of the 4 other subroutines # In principle, should accept variable length arguments # and recursively reduce the items in list from right to left. # # Termination: @angle has 1 length. This is pushed onto @answer array. # Case 1: reduce negative number by adding 60 to it, and # subtracting 1 from number on left. # Case 2: reduce positive number >= 60 by subtracting 60 and # adding 1 to number on left. sub reduce { # print "0. Value of magic array var is @_.\n"; my @angle = @_; # @_ = undef; my ($b, $c) = ($angle[-2], $angle[-1]); # reduce from end. # Warnings when running test script indicate $c in the if statement is not defined. # But It is defined at the top, and should be defined if the @ARGV variable is being passed correctly. if ($c < 0 && scalar(@angle) > 1) { until ($c >= 0 && $c < 60) { $c += 60; $b -= 1; } unshift(@answer, $c); pop(@angle); @angle[-1] = $b; # Debug print statements print "2. b = $b, c = $c\n"; print "2. Angle array is @angle.\n "; print "2. Value of magic array var is @_.\n"; print "2. Values in answer array: @answer.\n"; #### &reduce(@angle); } elsif ($c >= 60 && scalar(@angle) > 1 ) { until ($c < 60 && $c >= 0) { $c -= 60; $b += 1; } unshift(@answer, $c); pop(@angle); @angle[-1] = $b; # Debug print statements print "3. b = $b, c = $c\n"; print "3. Angle array is @angle.\n "; print "3. Value of magic array var is @_.\n"; print "3. Values in answer array: @answer.\n"; #### &reduce(@angle); } elsif ( ($c >= 0 && $c < 60 ) && scalar(@angle) > 1) { unshift(@answer, $c); pop(@angle); &reduce(@angle); } else { unshift(@answer, @angle); print "Reduced answer: @answer \n"; } return $answer; } main( @ARGV ) unless caller(); sub main { &reduce( @ARGV ); }