Aha! That exlains a whole lot more! The for loop keeps track of a variable $q that alternates between '&' and ';'. So the string evalled alternates between &q( ) and ;q( ).
By now, the secret is unraveled: the first eval calls the home-made sub, which returns one of the words of a JAPH. The second eval just means ;' ' and returns a space.