in reply to subroutine array question

It'd be helpful if you showed any error messages or explained what you got vs what you expected to get.

You seem to be using the parameters to circ_area as rvalues when you modify each parameter in turn. This will modify the original values as passed in, except that those values are constants and not modifyable. Then you return them - so that's just confusing. Why modify in place, and then return new copies?

Also, you don't need the &. So get rid of it.

Option 1:

my @area = (5,6,7); circ_area(@area); # rest as-is
Of course, this makes your code a liar - the area of those circles aren't 5, 6, and 7. The values are misleading until after the call to circ_area.

Option 2:

# rest as-is sub circ_area { map { 3.14 * ($_ ** 2) } @_; }
Here we are creating a new array by mapping from the input values to some new output values. Since we don't assign back to $_, we aren't overwriting the constant inputs. This would be the way I suggest going.