The style of code you are using is SQF, so you should call it "script.sqf", not "script.sqs". ArmA doesn't care about the filename, since it runs scripts assuming a syntax based on what command you use to run them, but it is clearer for the reader if you follow the convention of using the correct extension.
Yes, it is usual to call with:
["fish", 27] call _function;
and then "accept" that at the top of the function with:
_typeOfAnimal = _this select 0;
_numberOfAnimals = _this select 1;
This format makes sense regardless of the number of parameters you want to pass through.
Some people prefer to use a single-parameter format when they only want to send one parameter (I prefer to stay consistent and always use the above style, regardless of the number of parameters):
44 call _function;
and then "accept" that at the top of the function with:
_angelsOnTheHeadOfAPin = _this;
EDIT: Split the thread, since original author asked a non-related question.