It's always a good practise to check your input parameters inside your subroutine. Even in C/C++ you need to check if a pointer is NULL. This is called defensive programming. A module programmer must always assume that what might go wrong will go wrong. Explicit checking is always necessary to produce robust code.
Perl supports prototype checking (although many people choose not to use it). For example, sub foo($); tells Perl that the subroutine 'foo' only takes a single scalar as parameter. If you pass other data type into the sub, Perl will complain. Combining prototyping and explcit checking, you can make your module more robust.
By the way, ref(@_) is not going to do what you think it will do. You would need to do something along the lines of:
my $array_ref = shift;
croak 'Not an array reference' unless ref($array_ref) eq 'ARRAY';
my @array = qw/ 1 2 3 4 5 /;
my %hash = qw/ 1 1 2 2 3 3 4 4 5 5 /;
and the output
Update: crossed out the section on Perl prototype checking
$VAR1 = [
Not an array reference at try.pl line 9
main::array_ref('HASH(0x81d4e14)') called at try.pl line 18
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
| & || & |
| < || < |
| > || > |
| [ || [ |
| ] || ] ||