in reply to Parameters to functions

What you are refering to is called prototypes (the ($$)-thingie), there are several posts on this site explaining why prototypes are bad and shoudln't be used... I suggest you try a super-search for prototype.

Also be careful when you say: 'second param should be an array', you cannot pass an array (or to be correct, you can pass it, but you can't extract it from the @_ array), you can only pass an array-reference (you can read more about references in the perlreftut, perlref and perldsc POD).

Update: If you want to verify the parameters then you need to do that yourself in your sub, for that you can use write your own code for this or use a module like dragonchild. (If you want to write your own code then it might be a good idea to look at the ref-function (to see if something is an array-reference for example))

Replies are listed 'Best First'.
Re^2: Parameters to functions
by Forsaken (Friar) on May 12, 2005 at 18:12 UTC
    To expand on the parent's post update, when passing refs you *can* check if it's the proper one. To take your example:
    sub callmeth { my @arguments = @_; my $scalar = shift(@arguments); my $arrayref = shift(@arguments); unless(ref($arrayref) eq 'ARRAY')) { carp/croak/die/whatever you feel like; } * do stuff here }
    Personally I spend less and less time on making sure methods that are available from outside a package check what their input is. If it's code that at some point might be used by others then i might check some inputs and do a little carping when it's wrong, but Perl is a highly flexible language and it's neigh impossible to account for every possible way someone using your code might screw things up. If the code works and you've accounted for anything *you* could do wrong and the documentation is clear and complete then your job is done in my opinion.

    Remember rule one...